2017-04-19 80 views
0

有没有一种方法可以找到所有输入的字段,type = email?按输入类型查找字段

下面是一个HTML片段:

<input id="keeper-email_email" name="keeper-email.email" value="" 
     aria-describedby="keeper-email_email-hint" no_optional_label="true" 
     type="email" autocomplete="off" maxlength="254"> 

我可以看到,有一个ID等等但根据某些标准的变化。我希望能够编写一种方法来识别任何类型为电子邮件的字段并输入所需的电子邮件地址。

有没有办法与水豚做到这一点?

我已经试过:

all('input[type='email']") 

回答

1

为了保持它的可读性,你想要的:field选择的type选项

fields = all(:field, type: 'email') 
fields[0].set('bla') 
fields[1].set('blo') 

,如果你知道有将是一个至少一个领域,你可能想

all(:field, type: 'email', minimum: 1) 

所以它利用Capybaras的等待行为至少出现一个字段(如果你知道将会有2个使用count: 2作为替代选项)

如果只有将是另一种选择之一将是

find_field(type: 'email') 

如果不是上的字段的类型匹配要检查的部分文本“邮件”你也可以做

标签
all(:field, 'email', exact: false) # The same count/minimum/etc options from above can be used here too 
+0

比我的好多了,谢谢您。 – Tom

1

附近有一座小游戏后,我想出了工作如下:

emails = all(:xpath, "//label[contains(text(), 'email')]") 
email = emails[0].text 
email_2 = emails[1].text 
fill_in(email, with: 'bla') 
fill_in(email_2, with: 'blo') 

这工作,因为每封电子邮件的形式有单词“电子邮件”在其标签文本中。

+1

看到我的答案 - 它更可读,会更可靠(当使用count/minimum/etc选项时),并且性能会更高(调用set vs fill_in也会发现) –