2016-03-20 11 views
0

Ich versuche, den Inhalt aller Link-Seiten zu überprüfen, die sich auf der erforderlichen URL befinden.Selenide- ungültiger Selektor: Es ist nicht möglich, ein Element mit dem xpath-Ausdruck zu finden

So mache ich folgendes:

1- alle Links in der gewünschten URL finden

2- Überprüfung der Validierung für Links (href Inhalt)

3- navigate jedem Link

5- überprüfen unsere Bedingung für jeden Link

String[] links = null; 
    int linksCount = 0; 
    System.setProperty("webdriver.chrome.driver", "Resources/chromedriver.exe"); 
    WebDriverRunner.setWebDriver(new ChromeDriver()); 
    driver= WebDriverRunner.getWebDriver(); 


    open("http://vanilla.sa/"); 
    List<WebElement> linksize = WebDriverRunner.getWebDriver().findElements(By.tagName("a")); 
    linksCount = linksize.size(); 
    links= new String[linksCount]; 
    out.println("List of links Available: "); 

    for(int i=0;i<linksCount;i++) 
    { 
     links[i] = linksize.get(i).getAttribute("href"); 

    } 
    // navigate to each Link on the webpage 
    for(int i=0;i<linksCount;i++) 
    { 

     System.out.println(links[i]); 
     driver.navigate().to(links[i]); 
     Selenide.sleep(7); 
     WebElement error = $(Selectors.byText("condition")); 
     $(error).shouldNotBe(visible) 
      .shouldNotBe(text("condition")); 

    } 

alth ough Ich habe versucht, diese Bedingung für eine URL zu überprüfen, und es hat funktioniert, aber wenn navigate automatisch auf verschiedene Links (URLs), wie das Beispiel oben
dann habe ich die folgende Ausnahme:

http://vanilla.sa/%D8%AD%D9%82%D8%A7%D8%A6%D8%A8/%D8%AD%D9%82%D8%A7%D8%A6%D8%A8-%D9%83%D8%A8%D9%8A%D8%B1%D8%A9 org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression .//*/text()[normalize-space(.) = "condition"]/parent::* because of the following error: TypeError: Failed to execute 'createNSResolver' on 'Document': parameter 1 is not of type 'Node'. (Session info: chrome=49.0.2623.87) (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.2 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 74 milliseconds For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html Build info: version: '2.50.1', revision: 'd7fc91b', time: '2016-01-29 19:04:49' System info: host: 'Hana', os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.7.0_80' *** Element info: {Using=xpath, value= .//*/text()[normalize-space(.) = "condition"]/parent::* } Session ID: 94c50df8d0862e2060230a819395224e Driver info: org.openqa.selenium.chrome.ChromeDriver

Antwort

0

Nach dem Zurückverfolgungs, .///text()[normalize-space(.) = "condition"]/parent:: XPath Ausdruck wird verwendet. Es ist tatsächlich ungültig, haben Sie wahrscheinlich gemeint:

.//text()[normalize-space(.) = "condition"]/parent::* 
+0

WebElement error = driver.findElement (By.xpath (“.// Text() [. Normalisieren-Raum() = \ "" + "Zustand" + "\"] /Elternteil::*")); – Hana90

+0

org.openqa.selenium.NoSuchElementException: kein solches Element *** Elementinfo: {Using = xpath, value =. // text() [normalize-space (.) = "Bedingung"]/parent :: *} – Hana90

+0

siehe http://stackoverflow.com/questions/36128144/invalid-selector-matter-of-loading-page-or-not – Hana90

1

Ihr Code wahrscheinlich nicht, weil einige href keine Links sind und eine leere Seite geladen werden. Sie müssen die gültigen filtern und die Duplikate entfernen. Um zu testen, alle Links in Java/Selen/ChromeDriver:

WebDriver driver = new ChromeDriver(); 
driver.get("http://vanilla.sa"); 

ArrayList links = (ArrayList)((JavascriptExecutor)driver).executeScript(
    "var arr = {}, l = document.links;" + 
    "for(var i=0; i<l.length; i++) {" + 
    " var link = l[i].href;" + 
    " if(link.startsWith('http'))" + 
    " arr[link] = 0;" + 
    "}" + 
    "return Object.keys(arr);"); 

for (Object link : links) { 
    driver.get(link.toString()); 
    WebElement element = driver.findElement(By.xpath("//body")); 
} 
+0

Ich habe erfolgreich alle Links bekommen, aber mein Problem beim Finden eines bestimmten Elements für eine Seite Link wann Navigieren – Hana90

+0

finden Sie unter http://stackoverflow.com/questions/36128144/invalid-selector-matter-of-loading-page-or-not – Hana90

0

Es scheint die Antwort oben durch Florent B. ist ziemlich gut.

Lassen Sie mich ein paar Tipps zum Codierungsstil geben. Ich sehe, dass Sie nicht die volle Selenide-Syntax nutzen. Ihr Test kann vereinfacht werden:

System.setProperty("webdriver.chrome.driver", "Resources/chromedriver.exe"); 
System.setProperty("selenide.browser", "chrome"); 

open("http://vanilla.sa/"); 
List<String> links = new ArrayList<>(); 
out.println("List of links Available: "); 

for (SelenideElement link : $$("a")) { 
    links[i] = link.attr("href"); 
} 

// navigate to each Link on the webpage 
for (String link : links) { 
    System.out.println(link); 
    open(link); 
    sleep(7000); // this is milliseconds! 
    $(byText("condition")) 
     .shouldNotBe(visible) 
     .shouldNotHave(text("condition")); 
}