[英]How to use selenium webdriver to click on links
如何使用selenium webdriver
從具有屬性a[href*=/simulation/form/]
的頁面中獲取所有鏈接,然后打開和關閉每個鏈接?
我嘗試了以下代碼,但它返回TypeError: link.click is not a function
var simLinks = driver.findElements(By.css('a[href*=/simulation/form/]'));
for(var link in simLinks){
link.click();
driver.wait(30000);
driver.back();
}
如果我做console.log(simLinks.length)
它返回undefined
相反,如果我嘗試打開該類型的單個鏈接,它會完美運行:
var simLinks = driver.findElement(By.css('a[href*=/simulation/form/]')).click();
使用util.inspect()
函數檢查對象:
const util = require('util');
...
console.log(util.inspect(simLinks));
完成后,您將看到simLinks
是ManagedPromise
,因此您需要按如下方式更改代碼以使其工作:
driver.findElements(By.css('a[href*="/simulation/form/"]')).then(function (simLinks) {
for (let link of simLinks) {
link.click();
driver.wait(until.urlContains('/simulation/form/', 30000));
driver.navigate().back();
}
});
然而,問題在於只有第一次點擊有效,但是一旦你導航回來,就會出現一個合法的StaleElementReferenceError
- 頁面確實發生了變化,循環中的下一個元素不再附加到可見頁面。 因此,更好的策略是收集鏈接地址並將它們與driver.navigate().to(link)
:
driver.findElements(By.css('a[href*="/simulation/form/"]')).then(function (simLinks) {
var hrefs = simLinks.map(link => link.getAttribute('href'));
for (let link of hrefs) {
driver.navigate().to(link);
driver.wait(until.urlContains('/simulation/form/', 30000));
driver.navigate().back();
}
});
我相信你應該使用:
console.log(simLinks.size())
我不知道 javascript 中是否需要 () - 它在 java 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.