0

我正在使用 Selenium 网络驱动程序。我必须从文件中读取链接的 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();
}

但我不确定。如果此功能合适,请告诉我方法是否正确。请提出更好的方法来实现代码。

谢谢!!

4

1 回答 1

0

嗯......最后一组代码有几个问题。

首先是您将获得 StaleElementReferences。当您找到一个元素(或元素列表)时,它们是指向一个页面的元素。如果您刷新页面或离开并返回,它们将无效,您必须重新查找所有元素。

此外,很多时候链接不会将您导航到新页面。如果您的任何链接都是这种情况,您会突然发现自己点击了错误页面上的链接(因为您导航回来了)

最后,您实际上并没有在页面上做任何事情。如您所知,该链接可能会出现 500 错误,而 Selenium 不知道。

然而,既然你有一个文件中的所有链接,为什么不直接读取文件,将它存储在一个数组中,然后执行一个简单的 for 循环:

for (String linkName: allLinks){
   driver.get(urlWithLinks);
   driver.findElement(By.linkText(linkName)).click();
   ...validate the page...
}

最后......我个人认为点击页面上的所有链接是一个可怕的测试。更好的测试是转到链接,然后在页面上执行操作。这样,您实际上是在测试网站的功能。

于 2013-08-20T00:00:39.907 回答