簡體   English   中英

如何使用 selenium webdriver 點擊鏈接

[英]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));

完成后,您將看到simLinksManagedPromise ,因此您需要按如下方式更改代碼以使其工作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM