2013-02-20 15 views
17

पर कोई टेक्स्ट मौजूद है या नहीं, यदि पाठ मौजूद है तो xyz पर क्लिक करें और abc पर क्लिक करें।पृष्ठ

मैं if बयान नीचे उपयोग कर रहा हूँ:

if(driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/div/table/tbody/tr[6]/td[2]")).isDisplayed()) 
{  
    driver.findElement(By.linkText("logout")).getAttribute("href");   
} else {   
    driver.findElement(By.xpath("/html/body/div/div/div/a[2]")).click(); 
} 

स्क्रिप्ट निम्न त्रुटि संदेश के साथ विफल:

Unable to locate element: {"method":"xpath","selector":"/html/body/div[2]/div/div/div/div/div/div/table/tbody/tr[6]/td[2]"} 
+0

कृपया HTML कोड प्रदान करें। –

उत्तर

1

यहाँ हम, की कोशिश का उपयोग कर सकते अजगर वेब ड्राइवर का उपयोग कर समारोह को छोड़कर। कोड नीचे देखें

webtable=driver.find_element_by_xpath("xpath value") 
print webtable.text 
try: 
    xyz=driver.find_element_by_xpath(("xpath value") 
    xyz.click() 

except: 
    abc=driver.find_element_by_xpath(("xpath value") 
    abc.click() 
24

इस कोड का प्रयास करें:

संपूर्ण वेब पृष्ठ में पाठ उपस्थिति की जांच करने के लिए इस्तेमाल नीचे कोड।

if(driver.getPageSource().contains("your Text")) 
{ 
    //Click xyz 
} 

else 
{ 
    //Click abc 
} 

आप किसी विशेष वेब तत्व

if(driver.findElement(By.id("Locator ID")).getText().equalsIgnoreCase("Yor Text")) 
{ 
    //Click xyz 
} 

else 
{ 
    //Click abc 
} 
+0

मैंने अनुभव किया, प्रदर्शन वाले तत्व: कोई भी खाली (कोई पाठ नहीं) के रूप में वापस लौटाया गया था, भले ही उनमें टेक्स्ट शामिल था (क्रोम देव उपकरण ने टेक्स्ट दिखाया) – mojjj

1

आप एक कोशिश पकड़ में "IsDisplayed" रैप करने के लिए की जरूरत पर पाठ जाँच करना चाहते हैं। "IsDisplayed" केवल तभी बुलाया जा सकता है जब तत्व मौजूद है।

आप इम्प्लीट टाइम आउट को ओवरराइड करना चाहेंगे, अन्यथा प्रयास/पकड़ में काफी समय लगेगा।

0

सबसे पहले, इस प्रकार के XPaths और byLinkText वास्तव में खराब लोकेटर हैं और अक्सर विफल हो जाएंगे। Locators बदलने के लिए वर्णनात्मक, अद्वितीय, और असंभव होना चाहिए। प्राथमिकता उपयोग करने के लिए है:

  1. आईडी
  2. कक्षा
  3. सीएसएस (better performence than XPath)
  4. XPath

तो फिर तुम getText() तत्व पर उपयोग कर सकते हैं बल्कि वें पूरे पृष्ठ पर (getPageSource()) जो अधिक विशिष्ट है। try catch भी isDisplayed() के लिए एक अच्छा अभ्यास है के रूप में @Robbie कहा गया है, या अभी तक FluentWait का उपयोग बेहतर तत्व को खोजने के लिए:

// Waiting 10 seconds for an element to be present on the page, checking 
// for its presence once every 1 second. 
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
    .withTimeout(10, SECONDS) 
    .pollingEvery(1, SECONDS) 
    .ignoring(StaleElementReferenceException.class) 
    .ignoring(NoSuchElementException.class) 
    .ignoring(ElementNotVisibleException.class) 

फिर तो जैसे का उपयोग करें:

wait.until(x -> { 
    WebElement webElement = driverServices.getDriver().findElement(By.id("someId")); 
    return webElement.getText(); 
    }); 

wait.until(x -> { 
    WebElement webElement = driverServices.getDriver().findElement(By.id("someOtherId")); 
    return webElement.getAttribute("href"); 
    }); 
0

कोड नीचे इस प्रयास करें: -

Assert.assertTrue(driver.getPageSource().contains(textOnThePage));