0

Selenium webdriver を使用しています。ファイルからリンクの xpath を読み取り、リンクが Web ページに存在するかどうかを検索する必要があります。存在する場合は、それをクリックします。それでおしまい!!

リンク用のファイルはこちら

link1 //a[contains(text(), 'Volunteer Registration')]/@href
link2 //a[contains(text(), 'Sign Up')]/@href
link3 //a[contains(text(), 'Register/sign Up')]/@href

同様に、1 つのリンクとそれに関連付けられた xpath を読み取る 1 つのファイルがあり、その Xpath に基づいて、リンクが Web ページに存在するかどうかを検索します。

私が書いたコードは次のとおりです。

テキスト ファイルから 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 関連リンクが Web ページに存在するかどうかを検索するメソッドを作成したいと思います。

それを手伝ってください..

ロジックは次のようなものです

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

ええと...最後のコードセットにはいくつかの問題があります。

1 つ目は、StaleElementReferences を取得することです。要素 (または要素のリスト) を見つけると、それらはページへの要素を指しています。ページを更新したり、離れて戻ってきたりすると、それらは無効になり、すべての要素を再検索する必要があります。

また、多くの場合、リンクから新しいページに移動することはできません。これがあなたのリンクのいずれかに当てはまる場合、突然間違ったページのリンクをクリックしていることに気付くでしょう (戻ってきたため)。

最後に、実際にはページで何もしていません。ご存じのとおり、リンクが 500 エラーになる可能性がありますが、Selenium にはわかりません。

ただし、ファイル内にすべてのリンクがあるため、ファイルを読み取って配列に格納し、単純な for ループを実行するだけではどうですか。

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

最後に...個人的には、ページ上のすべてのリンクをクリックするのはひどいテストだと思います。はるかに優れたテストは、リンクに移動し、ページで何かを行うことです。そうすれば、Web サイトの機能を実際にテストできます。

于 2013-08-20T00:00:39.907 に答える