2016-11-30 60 views
7

ile göreceli bir değer olup olmadığını sınama Bir etiketimde benim href özniteliğindeki değerin Selenium kullanarak göreli yol olup olmadığını test etmek istiyorum. Bir etiketi seçmek için selenyum kullanmakHref değeri, selenyum

<a href="/about/somepage/">my page</a> 

:

Bu

benim HTML

string hrefValue = _chromeDriver.FindElement(By.TagName("a")).GetAttribute("href"); 

Bu dönecektir "http://mydomain/about/somepage/" bölümü "http://mydomain" HTML olmasa bile .

Yani
<a href="http://myDomain/about/somepage/">my page</a> 

, nasıl gerçek değeri arasında ise test edebilirsiniz: Ben GetAttribute("pathname") kullanıyorsanız

ben HTML şöyle BİLE eğer bununla GetAttribute("pathname") sadece değerini "/about/somepage/" verecektir istediklerini verecek href özniteliği göreli mi, yoksa web siteme mi ait değil?

cevap

5

Bunu yapmanın en kolay yolu, bir etiket için bakmak değil aynı zamanda href niteliğini incelemek ve "http" ile başlıyorsa görmektir.

Console.WriteLine(driver.FindElements(By.CssSelector(a[href^='http'])).Any()); 

Bu, False'ı yazdırırsa, görelidir.

+0

güzel cevap, harika –

+0

Teşekkürler, bu bir çekicilik gibi çalıştı :) – andreasnico

2

Birincisi, kimin http ile href başlangıç ​​tüm bağlantıları olsun. Liste Burada 1'den büyük kod snippet-

 List<WebElement> links = driver.findElements(By.cssSelector("a[href^='http']")); 

     if (links.size() == 0) { 
      System.out.println("relative"); 
     }else { 
      boolean isAbsolute = false; 
      for (WebElement link: links) { 
       if(link.getText().equals("Visit 2.com!")){ 
        isAbsolute = true; 
        break; 
       } 

      } 

      if (isAbsolute) { 
       System.out.println("absolute"); 
      }else { 
       System.out.println("relative"); 
      } 
     } 
+0

Merhaba. Bu maalesef işe yaramayacak. Testiniz her zaman alanın mevcut olduğunu söyleyecektir. (Ve orada problem var) – andreasnico

+0

oh, doğru –

+0

çözümünüzü deniyorum. –

1
olduğu ise bu yana, bağlantılar mutlak veya göreceli hem olabilir ve istenilen biri çok http ile başlayan olup olmadığını bilmiyorsun, ekstra kontrol gereklidir

o <a> içeride her şeyi vermelidir bunu deneyin ve sonra bunu kontrol edebilirsiniz:

string hrefValue = _chromeDriver.FindElement(By.TagName("a")).getAttribute("innerHTML")

Düzenleme:

ile deneyin Bunun yerine. Bu bütün şeyi

+0

Bu sadece bana "sayfamı" veriyor. Öznitelikteki değerler hiçbir şekilde – andreasnico

+1

olduğundan emin değilim ki bu, "href ="/about/somepage/"' beklediğiniz gibi değil, ancak – Andersson

+0

öğesinin metnini evet, doğru dışHTML demek istedim – mosaad

2

Java sürümünü vermelidir:

eleman (link) outerHTML almak ve içinde http:// içerip içermediğini kontrol edin.

WebElement link = driver.findElement(By.linkText("my page")); 

    String href = link.getAttribute("href"); 
    String outerHtml = link.getAttribute("outerHTML"); 

    System.out.println("href " + href); 
    System.out.println("outerHtml " + outerHtml); 

    if(outerHtml.contains("href=\"http://")){ 
     System.out.println(href + " is absolute path"); 
    } 
    else{ 
     System.out.println(href + " is relative path"); 
    } 
+0

DışHTML'de * bir şey * varsa, bu bile bir metin * bile olsa, bu size yanlış bir pozitif verebilir. – JeffC

+0

@JeffC, geçerli nokta, düzenlenmiş. –

+0

OP C# için de istedi ... – JeffC