如何使用站点棱镜在没有 xpath 的情况下映射元素?

How to map elements without xpath using site-prism?

我需要停止从 xpath 映射元素,但我在映射以下元素时遇到问题。 除了 xpath,我找不到任何其他映射方式。

我的主页 http://drive-thru-hml.s3-website-us-west-2.amazonaws.com/login/primeiro-acesso

*******我的带有映射元素的页面 ********

element :txt_cpf_branco,    :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/div[1]/span'

element :txt_dtnasc_branco, :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/div[2]/span'

element :txt_nome_branco,   :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[1]'

element :txt_cel_branco,    :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/div[4]/span'
element :txt_email_branco,  :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[2]'
element :txt_cep_branco,    :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[3]' 
element :txt_rua_branco,    :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[4]'         
element :txt_num_branco,    :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[5]'
element :txt_bairro_branco,  :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[6]'
element :txt_cidade_uf,     :xpath,  '//*[@id="gatsby-focus-wrapper"]/div/div/div/main/div/div/div[2]/form/div[1]/span[7]'

这个问题没有一个答案。这完全取决于您需要的具体程度以及页面上有多少其他可能匹配的元素。你也没有说明你想使用什么而不是 XPath,所以我假设 CSS 和 text 过滤器。一些潜在的选择可能是

element :txt_cpf_branco, :css, '#gatsby-focus-wrapper span', text: 'Preencha o CPF correto, por favor. Em caso de paciente menor de idade sem CPF, inclua o da pessoa responsável'

或者因为默认的文本匹配是你可以做的子字符串

element :txt_cpf_branco, :css, '#gatsby-focus-wrapper span', text: 'Preencha o CPF correto'

另外,由于 :css 是默认的选择器类型,您通常可以删除它

element :txt_cpf_branco, '#gatsby-focus-wrapper span', text: 'Preencha o CPF correto'

如果您还想检查元素的 class 部分以缩小范围,您可以将正则表达式传递给 class 过滤器

element :txt_cpf_branco, '#gatsby-focus-wrapper span', text: 'Preencha o CPF correto', class: /signUpFormFields__InputError\-/

使用这些示例,您应该能够完成您要更改的其余元素。正如在回答您之前的一个问题时所述,您应该能够将可以传递给 Capybaras find 方法的任何内容传递给 element -https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Node/Finders#find-instance_method - 包括该文档中显示的所有标准选项以及任何选择器类型特定选项(:css 选择器类型没有任何额外选项)