2013-11-20 21 views
0

在Selenium 2.37中,我可以點擊上下文菜單中的「打開」項目,當我通過兩步搜索時:Selenium 2.37 XPath,在上下文菜單中找到一個項目,然後再次單擊該項目

  1. 找了幾個WebElement的通過搜索以下XPath:

TD [@class = \ 「dijitReset dijitMenuItemLabel \」 和 「+ 」開頭,以(@id,\「 dijit_MenuItem_ \」)]

  1. 然後,對於每個WebElement中的s WebElement的列表,我做 String s = we.getText();如果(s.equals(「Open」)== true){...}

這工作正常。

我的問題是,當我做上述的「在一個步驟」,通過包括在XPath搜索文本:

TD [@class = \「dijitReset dijitMenuItemLabel \」和「+ 」開始,與(@id,\「dijit_MenuItem_ \」)和text()= \「Open \」]

在這種情況下,我在上下文菜單中找到「打開」條目,我可以點擊它。到現在爲止還挺好。因此,爲了找到開放條目ONCE,並單擊它,上述兩個方法都可以正常工作。

問題是,當我使用第二種方法,然後下一次我想調出上下文菜單(對於不同的文檔),然後單擊打開菜單項,出現上下文菜單。但鼠標不會向下移動到打開菜單項,所以點擊從不發生。

這是所有在單個WebDriver運行期間,所以結果是我可以打開一個文檔(我看到的第一個文檔),它的上下文菜單出現,鼠標移動到Open上下文菜單項並單擊它。但隨後(運行相同的WebDriver),當我到達第二個文檔時,會發生右鍵單擊,並出現上下文菜單,但鼠標不會向下移動到Open菜單項,因此單擊從不發生。

當然,現在,我正在使用第一種方法。但我真的更喜歡使用第二種方法,因爲如果所有內容(包括text()匹配)都在一個XPath表達式中,我可以在WebDriverWait中查找該元素。

就好像打開菜單項被(從某種程度上)銷燬,從DOM中分離出來的,或者更復雜的XPath被用來找到它的時候。

我只在上下文菜單中出現了這個問題。

任何意見將不勝感激!

+0

你說你可以「選擇打開條目」,但不要點擊它。選擇它意味着什麼?它以某種方式突出顯示? – forgivenson

+0

感謝您的回覆。通過「選擇它」,我的意思是運行的WebDriver代碼選擇了打開菜單項。但現在我又試了一次,那是不正確的。第二次實際發生的是上下文菜單出現。但鼠標不會向下移動(在上下文菜單中)到打開項目。 (這與第一次不同,當上下文菜單出現時,鼠標向下移動到打開項目,然後單擊打開項目。) – user2971144

+0

我剛剛更新了原始問題。感謝forgivenson指出我原來的錯誤。 – user2971144

回答

0

您沒有發送完整的問題示例,但對於我所瞭解的您並未等待要加載的內容(特別是如果您在SPA上執行此操作,則需要使用一些onClick綁定)。嘗試使用硬編碼等待一秒的第一種方法,如果它點擊,則需要找到一種方法來檢查Open元素是否具有綁定的點擊。您可以添加一些額外的wait.until像:

wait.until(ExpectedConditions.elementToBeClickable(By.id<locator>)); 

你也可以創建注入的JavaScript的瀏覽器和返回是點擊的綁定一些擴展預期的條件。

相關問題