我正在使用Selenium webdriver。 我必须从文件中读取链接的xpath并搜索网页上是否存在该链接,如果存在则单击它。 多数民众赞成!!
继承链接的文件
link1 //a[contains(text(), 'Volunteer Registration')]/@href
link2 //a[contains(text(), 'Sign Up')]/@href
link3 //a[contains(text(), 'Register/sign Up')]/@href
同样明智地,我有一个文件,我将从中读取一个链接及其关联的xpath,并根据该Xpath我将搜索链接是否存在于网页上。
我为此编写的守则是:
将数据从文本文件读入Hashtable -
public HashMap<String, String> readDataFromFile(String fileName) {
try {
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String strLine = null;
String[] prop = null;
while ((strLine = br.readLine()) != null) {
prop = strLine.split("\t");
recruiters.put(prop[0], prop[1]);
}
br.close();
fr.close();
} catch (Exception exception) {
System.out.println("Unable to read data from recruiter file: " + exception.getMessage());
}
return recruiters;
}
根据键
从哈希表返回xpath值的方法 public String findValue(String Name){
for (String s: HashTable.entrySet()) {
Map.Entry entry = (Map.Entry) s;
if(entry.getKey().equale(Name))
{
String value= entry.getValue();
return value;
}
}
return null;
}
现在我想写一个方法来搜索网页上是否存在与xpath相关的链接..
请帮帮我..
逻辑就像
public void Search&ClickLink()
{
List<WebElement> links = driver.findElements(By.tagName("a"));
System.out.println(links.size());
for (WebElement myElement : links){
String link = myElement.getText();
System.out.println(link);
myElement.click();
driver.navigate().back();
}
但我不确定。 如果此函数是适当的,请告知我approch是否正确。 请建议更好的方法来实现代码。
谢谢!
答案 0 :(得分:0)
嗯......最后一组代码存在一些问题。
首先,您将获得StaleElementReferences。当您找到元素(或元素列表)时,它们指向页面的元素。如果您刷新页面或离开并返回,它们将无效,您必须重新找到所有元素。
此外,很多时候链接无法导航到新页面。如果您的任何链接都是这种情况,您会突然发现自己点击错误页面上的链接(因为您已导航回来)
最后,您实际上并未在页面上执行任何操作。如你所知,链接可能会出现500错误,Selenium也不知道。
但是,由于您拥有文件中的所有链接,为什么不只是读取文件,将其存储在数组中,然后执行简单的for循环:
for (String linkName: allLinks){
driver.get(urlWithLinks);
driver.findElement(By.linkText(linkName)).click();
...validate the page...
}
最后......我个人认为点击页面上的所有链接是一个可怕的测试。一个更好的测试是去链接,并在页面上做东西。这样你实际上是在测试网站的功能。