Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Selenium-如何在运行时基于属性识别元素_Ruby_Selenium_Selenium Webdriver_Xpath_Webdriver - Fatal编程技术网

Ruby Selenium-如何在运行时基于属性识别元素

Ruby Selenium-如何在运行时基于属性识别元素,ruby,selenium,selenium-webdriver,xpath,webdriver,Ruby,Selenium,Selenium Webdriver,Xpath,Webdriver,我有一个表,表中有一个名为“request submitted”的列,如果已提交,则选中,否则不选中,我想收集负责选中或未选中的类,以进行一些测试,以下是期望html代码时的两个选项: //*[@id="main-display"]/div[2]/div[2]/div/table/tbody/tr[3]/td[5]/button/i <i aria-label="consent received" class="fa fa-check-circle"></i> 谢谢,

我有一个表,表中有一个名为“request submitted”的列,如果已提交,则选中,否则不选中,我想收集负责选中或未选中的类,以进行一些测试,以下是期望html代码时的两个选项:

//*[@id="main-display"]/div[2]/div[2]/div/table/tbody/tr[3]/td[5]/button/i

<i aria-label="consent received" class="fa fa-check-circle"></i>

谢谢,

此代码将给出您预期的结果

array=[driver.find_elements(xpath: "//i[@class='fa fa-check-circle']"), driver.find_elements(xpath: "//i[@class='fa fa-circle-thin']")]
    .flatten
    .map{|element|element.attribute('class').split.last}

p array
更新:

如您所问,如果所有元素都相同,下面的代码将打印
true

result=(array.uniq.count.eql? (1)) ? true : false

p result
如果要特别检查
fa检查圈
,请编写以下代码

p array.map{|x|x.eql?'fa-check-circle'}.all?

#=> true if all elements are 'fa-check-circle' otherwise false

根据您的问题,您似乎希望收集class属性为fa-fa-check-circle或class属性为fa-fa-circle-thin的元素。因此,您可以按如下方式优化定位器策略:

req_submitted = $driver.find_elements(:xpath,"//i[contains(@class,'fa')][contains(@class,'fa-check-circle') or contains(@class,'fa-circle-thin')]")

注意:正如您提到的,您希望在一个数组中收集“fa-check-circle”和“fa-circle-thin”,粗略的fa-check-circle和fa-circle-thin在任何情况下都不会同时出现,您可以使用
find_-element()

只需使用
/i[contains(@class,“fa-check-circle”)]
/i即可[contains(@class,“fa circle thin”)]
要收集每种类型的元素谢谢Anderson,我明天会尝试,有没有办法在一个数组中同时收集这两种元素?OP不需要元素,OP需要字符串
fa check circle
fa circle thin
(在你的例子中,它是
req_submitted
),请看我的答案。@Rajagopalan我想我在问题中看到的一些地方,我想收集“fa check circle”和“fa circle thin”在粗糙的fa-check-circle和fa-circle-thin数组中,这两个元素不会同时出现。不,不,你误解了这个问题,他/她指的是具有
fa-check-circle
的元素,以及具有
fa-circle-thin
的元素。嗯,很有趣!!!参见上文我想收集负责checked或No的类t检查以进行一些测试,因此我们只是根据某个类的存在来识别元素。当然,您可以随时检索任何属性,例如
class
aria label
,等等。是的,这是正确的,但在该元素之外,她需要数组中的属性值,除了(fa),看看那个代码,这就是她要做的。安德森,拉贾戈帕兰,谢谢,这就是我要找的。有没有办法测试数组中是否只有相同的元素‘fa check circle’?谢谢lot@Fatna我也回答了你的另一个问题,这回答了你的问题吗?
RUBY:selenium webdriver警报不起作用
@Fatna你想检查数组是否只有
fa检查圈
而不是
fa检查圈薄
?@Fatna更新了答案,看看就知道了。Rajagopalan,你的代码很好,很干净,很粗糙,我做了这个数组。每个do | r |都把r预期(r)放在eq('fa-check-circle')结尾,但我更喜欢你的预期测试为真
p array.map{|x|x.eql?'fa-check-circle'}.all?

#=> true if all elements are 'fa-check-circle' otherwise false
req_submitted = $driver.find_elements(:xpath,"//i[contains(@class,'fa')][contains(@class,'fa-check-circle') or contains(@class,'fa-circle-thin')]")