1

セレン Web ドライバーを使用して、モバイル Web アプリのボタンをクリックしようとしました。ボタンが配置され、ボタン上のテキストを取得でき、クリック イベントのパフォーマンスも良好です。しかし、ナビゲーションは発生しません。

Click() メソッド、sendKeys() メソッド、およびスクリプト エグゼキュータを使用してみました。しかし、それ以上処理できませんでした。

コード:

public class TestWeb
{  

    WebDriver driver; 

    private Selenium selenium;   

    @Before
    public void setUp() throws Exception {
      driver = new IPhoneDriver();
      driver.get("http://10.5.95.25/mobilebanking");       
    }

    @Test
    public void TC() throws Exception  { 
        System.out.println("page 1");
        Thread.sleep(5000);
        WebElement editbtn1 = driver.findElement(By.id("ext-comp-1018"));
        String s1 = editbtn1.getText();
        System.out.println(s1);
        editbtn1.click();
        editbtn1.sendKeys(Keys.ENTER);
        ((JavascriptExecutor)driver).executeScript("arguments[0].click;", editbtn1); 

        System.out.println("ok");
    }

@After
    public void tearDown() throws Exception {
         System.out.println("*******Execution Over***********");
    }
}

click、sendKeys、ScriptExecutor を別々に、また組み合わせてみました。エラーなしで実行されていますが、ナビゲーションは発生しません。

ボタンでクリック機能を実行する他の方法を手伝ってくれる人はいますか?


RAM

4

1 に答える 1

1

これはあなたの問題ではないかもしれませんが、「ext-comp-」に気付き、extjs を使用していると思います。

私はGXTを使用していますが、IDによる検索は多くの場合に機能しましたが、一部の送信ボタンでは機能しませんでした。

要素を見つけてxpathをコピーするには、firefoxでfirebugを使用する必要がありました。次に、要素をクリックすることができました

driver.findElement(By.xpath("//div[@id='LOGIN_SUBMIT']/div/table/tbody/tr[2]/td[2]/div/div/table/tbody/tr/td/div")).click();  // worked

私にとっても静かに失敗していました。私の送信ボタンは LOGIN_SUBMIT の ID を持っているので、以下が失敗した理由はわかりませんが ....

driver.findElement(By.id("LOGIN_SUBMIT")).click();//failed  

編集:

正確な例を次に示します (ケース 1/2):

WebDriverWait wait = new WebDriverWait(driver, 30);
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='gwt-debug-LOGIN_SUBMIT']")));
    //wait.until(ExpectedConditions.elementToBeClickable((By.id("gwt-debug-LOGIN_SUBMIT"))));  <!-- id works as well

要素が見つかったので OK です。そうでない場合はタイムアウトになり、例外がスローされます。

それでも、次はエラーなしで失敗し (firefox では chrome で動作します)、ページは移動しません。

driver.findElement(By.xpath("//div[@id='gwt-debug-LOGIN_SUBMIT']")).click();
//driver.findElement(By.id("gwt-debug-LOGIN_SUBMIT")).click(); <-- fails too 

私がしなければならないことは次のとおりです。

driver.findElement(By.xpath("//div[@id='gwt-debug-LOGIN_SUBMIT']/div/table/tbody/tr[2]/td[2]/div/div/table/tbody/tr/td/div")).click();

したがって、私の経験では、xpath を含む要素を見つけたとしても、完全な xpath を使用しない限り、クリックは失敗しました。

別の正確な例を次に示します (ケース 2/2):

次のような要素を見つけることができます。

WebElement we = driver.findElement(By.xpath("//*[@id=\"text" + i + "\"]"));

次の方法でテキストを表示できるため、見つけたことがわかります。

 we.getText();

まだ失敗したことがわかったパスで選択します。

//get outta town man the following fails
driver.findElement(By.xpath("//*[@id=\"text" + i + "\"]")).click();

この場合、ケース 1 のように試行する明示的な xpath はありません。私がしなければならなかったことは、css を使用することでした。

//bingo baby works fine
driver.findElement(By.cssSelector("div#text" + i + ".myChoices")).click();

実際、私はそれを短縮するよりもfirebugを介してcssパスを取得しました。

//this is what I recieved
html.ext-strict body.ext-gecko div#x-auto-0.x-component div#x-auto-1.x-component div#x-auto-3..myBlank div#choicePanel1.myBlank div.x-box-inner div#text3.myChoices  //text3 is the id of the element I wanted to select

必要な xpaths と css セレクターを理解できるかどうかはわかりませんが、あなたがしたことを正確に経験したと思います。

于 2012-07-05T09:58:11.113 に答える