我有一个表格,其中有一个名为&#34的列;请求已提交" ,如果提交它已经检查过,否则它不是,我想收集负责检查或未检查的类进行一些测试,这是预期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>
AND
//*[@id="main-display"]/div[2]/div[2]/div/table/tbody/tr[4]/td[5]/i
<i aria-label="<span class="translation_missing" title="translation missing: en.aria.consent.'not_'received">'Not 'Received</span>" class="fa fa-circle-thin"></i>
我想在数组中收集"fa-check-circle"
和"fa-circle-thin"
,这就是我所做的:
Then /^I select request submitted$/ do
req_submitted = $driver.find_elements(:xpath,"//*[@id='main- display']/div[2]/div[2]/div/table/tbody//i")
# consent_values = consents.map { |consent| consent.attribute('class')[3..-1]}
puts req_submitted
ar = []
req_s = req_submitted.map do |r|
case r.attribute('class')
when "fa fa-check-circle" then ar.push('fa-check-circle')
when "fa fa-circle-thin" then ar.push('fa-circle-thin')
else nil
end
end
end
谢谢,
答案 0 :(得分:1)
此代码将提供您的预期结果
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-check-circle
,请编写以下代码
p array.map{|x|x.eql?'fa-check-circle'}.all?
#=> true if all elements are 'fa-check-circle' otherwise false
答案 1 :(得分:1)
根据您的问题,您似乎希望使用 class 属性收集元素作为 fa fa-check-circle 或 class 属性如 fa fa-circle-thin 。因此,您可以按如下方式优化定位器策略:
find_element()
注意:正如您所说,您想在数组中收集“fa-check-circle”和“fa-circle-thin”,粗略的 fa-check-circle 和 fa-circle-thin 在任何情况下都不会同时出现,您可以使用{{1}}代替。