Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

จะใช้ตัวเลือก CSS เป็นตัวระบุตำแหน่งในซีลีเนียมได้อย่างไร?


เราสามารถค้นหาองค์ประกอบด้วยตัวระบุตำแหน่ง CSS Selector ใน Selenium webdriver นิพจน์ทั่วไปในการสร้างนิพจน์ CSS คือ tagname[attribute='value'] เราสามารถใช้แอตทริบิวต์ id และ class เพื่อสร้าง CSS ได้

ด้วย id ไวยากรณ์ของนิพจน์ CSS คือ tagname#id ตัวอย่างเช่น สำหรับนิพจน์ CSS - input#txt-loc อินพุตคือชื่อแท็ก และ txt-loc คือค่าของแอตทริบิวต์ id

ด้วยชื่อคลาส ไวยากรณ์ของนิพจน์ CSS คือ tagname.class ตัวอย่างเช่น สำหรับนิพจน์ CSS - input.txt-cls อินพุตคือชื่อแท็ก และ txt-cls คือค่าของแอตทริบิวต์คลาส

หากมีองค์ประกอบย่อย n (ลูก) ขององค์ประกอบองค์ประกอบเว็บ (หลัก) และเราต้องการค้นหาตำแหน่งลูกที่ n ไวยากรณ์ของนิพจน์ CSS คือ nth-of-type(n)

จะใช้ตัวเลือก CSS เป็นตัวระบุตำแหน่งในซีลีเนียมได้อย่างไร?

ใน html ด้านบนนี้ หากเราต้องการค้นหา li ที่สี่ของ parent ul เช่น องค์ประกอบสมอที่มีข้อความ - คำถามและคำตอบ CSS ควรเป็น ul.reading li:nth-of-type(4) ในทำนองเดียวกัน เพื่อระบุชายด์คนสุดท้าย CSS ควรเป็น ul.reading li:last-child

สำหรับแอตทริบิวต์ที่มีค่าไดนามิก เราสามารถใช้สัญลักษณ์ ^=เพื่อระบุองค์ประกอบที่มีค่าแอตทริบิวต์ขึ้นต้นด้วยข้อความเฉพาะ ตัวอย่างเช่น input[name^='qa1'] [ในที่นี้ input คือ tagname และค่าของแอตทริบิวต์ name ขึ้นต้นด้วย qa1]

สำหรับแอตทริบิวต์ที่มีค่าไดนามิก เราสามารถใช้สัญลักษณ์ $=เพื่อระบุองค์ประกอบที่มีค่าแอตทริบิวต์ลงท้ายด้วยข้อความเฉพาะ ตัวอย่างเช่น input[class$='loc'] [ในที่นี้ input คือ tagname และค่าของแอตทริบิวต์ class ลงท้ายด้วย loc]

สำหรับแอตทริบิวต์ที่มีค่าไดนามิก เราสามารถใช้สัญลักษณ์ *=เพื่อระบุองค์ประกอบที่มีค่าแอตทริบิวต์มีสตริงย่อยเฉพาะ ตัวอย่างเช่น input[name*='sub'] [ในที่นี้ input is the tagname และค่าของแอตทริบิวต์ name มี substring sub].

ตัวอย่าง

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class CSSLocator{
   public static void main(String[] args) {
      System.setProperty("webdriver.gecko.driver",
      "C:\\Users\\ghs6kor\\Desktop\\Java\\geckodriver.exe");
      WebDriver driver = new FirefoxDriver();
      //implicit wait
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      //URL launch
      driver.get("https://www.linkedin.com/");
      //identify element
      WebElement m = driver.
      findElement(By.cssSelector("input[id='session_key']"));
      //enter text
      m.sendKeys("Java");
      String s = m.getAttribute("value");
      System.out.println("Attribute value: " + s);
      //close browser
      driver.close();
   }
}