3

Selenium WebDriver(2.21.0) を使用して Web 要素をクリックしようとしています。

Selenium IDE を操作しようとすると正常に動作しますが、Firefox ドライバーの Java 実装を使用して同じ一連のアクションを実行しようとすると、間違ったページが表示されます。

コードの実行中に目的の要素まで手動でスクロールすると、機能します。

を使用して、Web 要素が表示され、有効になっていることを確認しています

By by = By.xpath("(//a[contains(@href, 'javascript:void(0);')])[26]"); //**Edit:** this is how i  
                                                                       //am getting the locator

WebElement element = driver.findElement(by);


return (element.isEnabled() || element.isDisplayed()) ? element : null;

いくつかの要素を返しますが、私が期待しているものではありません。

Selenium webdriver はほとんどの場合、(画面に表示されていない場合) 要素にスクロールし、必要な対話を行うため、これは私には奇妙に見えます。

onetwoのようないくつかの答えを試しましたが、成功しませんでした。

前もって感謝します!

編集:これはIDEのエクスポートされたコードです(java/JUnit4/webdriver)

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class Bandar {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://e.weibo.com/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testBandar() throws Exception {
        driver.get(baseUrl + "/nescafechina");
        driver.findElement(By.xpath("(//a[contains(@href, 'javascript:void(0);')])[26]")).click();
        driver.findElement(By.xpath("(//a[contains(@href, 'javascript:void(0);')])[12]")).click();
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

    private boolean isElementPresent(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }
}
4

1 に答える 1

1

イシャンク、

私が行ったことは、テストで使用できるさまざまな種類のアサーションを示すテストを作成したことです。あなたが見ているものとは少し違って見えますが、あなたの主な問題はWebElement element = driver.findElement(by);、実際の要素を与えていないからだと思います. セクションは、(by);ページで見つかる文字列を探しています。許容される文字列は次のとおりです。id("gbfqb");または xpath("(//a[contains(@href, 'javascript:void(0);')])[26]");または name ("find-button");.

/**
 * Test the main Google page.
 * @throws InterruptedException 
 * 
 */
@Test
public void signUp() throws InterruptedException {

String testId = "TestStack01";

entered(testId);

webDriver.get("www.google.com");
webDriver.findElement(By.id("gbqfq")).clear();
webDriver.findElement(By.id("gbqfq")).sendKeys("Test");
assertEquals("", webDriver.findElement(By.id("gbqfb")).getText());

WebElement whatyourlookingfor = webDriver.findElement(By.id("gbqfb"));
assertTrue(selenium.isElementPresent("gbqfb"));
assertTrue(whatyourlookingfor.isEnabled());
assertTrue(whatyourlookingfor.isDisplayed());
assertFalse(whatyourlookingfor.isSelected());

webDriver.findElement(By.id("gbqfb")).click();

leaving(testId);

}

これが、返される要素を取得するのに役立つことを願っています。

カーティス・ミラー

于 2012-09-06T20:08:00.503 に答える