GVKun编程网logo

使用多个条件在Selenium中查找WebElement(selenium定位多个元素)

23

对于想了解使用多个条件在Selenium中查找WebElement的读者,本文将是一篇不可错过的文章,我们将详细介绍selenium定位多个元素,并且为您提供关于JavaSelenium封装--Rem

对于想了解使用多个条件在Selenium中查找WebElement的读者,本文将是一篇不可错过的文章,我们将详细介绍selenium定位多个元素,并且为您提供关于Java Selenium封装--RemoteWebElement、org.openqa.selenium.WebElement的实例源码、python – WebElement上的Selenium WebDriver“find_element_by_xpath”、Selenium API-WebElement 属性的有价值信息。

本文目录一览:

使用多个条件在Selenium中查找WebElement(selenium定位多个元素)

使用多个条件在Selenium中查找WebElement(selenium定位多个元素)

我正在使用Selenium来测试网站,如果我发现并以多个标准为依据,是否可以正常工作?例如 :

 driverChrome.findElements(By.tagName("input").id("id_Start"));

要么

driverChrome.findElements(By.tagName("input").id("id_Start").className("blabla"));

答案1

小编典典

不,不是的。您不能像这样串联/添加选择器。反正这是无效的。但是,您可以这样编写选择器,使其覆盖所有场景并将其与findElements()

By byXpath = By.xpath("//input[(@id=''id_Start'') and (@blabla'')]")List<WebElement> elements = driver.findElements(byXpath);

这应该返回带有input标签的元素列表,这些标签具有类名blabla并且具有id id_Start

Java Selenium封装--RemoteWebElement

Java Selenium封装--RemoteWebElement

package com.selenium.driver;
import java.sql.SQLException;
import java.util.List;
import org.json.JSONException;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.internal.Coordinates;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.ui.Select;

public class JSWebElement {
	private RemoteWebElement we = null;
	private JavascriptExecutor jse = null;
	
	public JSWebElement(){}
	
	public JSWebElement(RemoteWebElement we){
		this.we = we;
	}
	
	///
	///通过元素ID定位元素
	///
	public JSWebElement findElementById(String using) {
		try {
			return new JSWebElement((RemoteWebElement)we.findElementById(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}
	
	///
	///通过元素CSS表达式定位元素
	///
	public JSWebElement findElementByCssSelector(String using) {
		try {
			return new JSWebElement((RemoteWebElement)we.findElementByCssSelector(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}

	///
	///通过元素Xpath表达式定位元素
	///	
	public JSWebElement findElementByXPath(String using) {
		try {
			return new JSWebElement((RemoteWebElement)we.findElementByXPath(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}

	///
	///通过链接的文字定位元素
	///	
	public JSWebElement findElementByLinkText(String using) {
		try {
			return new JSWebElement((RemoteWebElement)we.findElementByLinkText(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}

	///
	///通过元素DOM表达式定位元素
	///	
	public JSWebElement findElementByDom(String using) {
		try {
			JavascriptExecutor js = this.getJSE();
			WebElement we = (WebElement)js.executeScript(String.format("return %s", using));			
			return new JSWebElement((RemoteWebElement)we);
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}

	///
	///判断元素是否存在
	///
	public Boolean isExist(){
		if (we != null){
			return true;
		}else{
			return false;
		}
	}

	///
	///获取元素的HTML内容
	///
	public String getHtml(){
		return we.getAttribute("outerHTML");
	}

	///
	///获取元素的文本内容
	///	
	public String getText(){
		return we.getText();
	}

	///
	///获取元素的value值
	///	
	public String getValue(){
		return this.getAttribute("value");
	} 
	
	///
	///获取元素的特定属性值
	///
	public String getAttribute(String name){
		return we.getAttribute(name);
	} 
		
	///
	///向可输入元素发送内容,如:text、textarea、filefield等
	///
	public void sendKeys(String string){
		String old_bg = this.setBackground("yellow");
		try {
			Thread.sleep(800);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		we.sendKeys(string);
		this.setBackground(old_bg);
	}
	
	///
	///判断元素是否可用
	///
	public boolean isEnabled(){
		return we.isEnabled();
	}
	
	///
	///判断元素是否可见
	///
	public boolean isVisible(){
		return we.isDisplayed();
	}
	
	///
	///清空可编辑元素的内容。不可编辑元素次操作会抛异常
	///
	public void clear(){
		we.clear();
	}
	
	///
	///对元素进行点击操作
	///
	public void click(){
		we.click();
	}
	
	///
	///检查元素的特定属性值
	///
	public void checkAttr(String attribute, JSWebUtils utils) throws SQLException, JSONException
	{
		String [] attributes=attribute.split("=", 2);
		String actual = this.we.getAttribute(attributes[0]);
		if (actual == null){ actual = "null"; }
		utils.checkPointBase(actual,attributes[1]);
	}
	
	///
	///获取元素的CSS值
	///
	public String getCssValue(String name)
	{
		return we.getCssValue(name);
	}
	
	///
	///判断元素是否被选中
	///
	public boolean isSelected()
	{
		return we.isSelected();
	}	
	
	///
	///可选元素进行选中操作;如:select
	///
	public void select(String by, String value) throws Exception
	{
		if (we.getTagName().equals("select")){
			Select select = new Select(we);
			if (by.equals("index")){
				select.selectByIndex(Integer.parseInt(value));
			}else if (by.equals("value")){
				select.selectByValue(value);
			}else if (by.equals("text")){
				select.selectByVisibleText(value);				
			}
		}else{
			Exception e = new Exception("The element is not SELECT Object");
			throw e;
		}
	}
	
	///
	///对可选中元素进行取消选择操作;如:SELECT in multiple type
	///
	public void deSelect(String by, String...value) throws Exception
	{
		if (we.getTagName().equals("select")){
			Select select = new Select(we);
			if (by.equals("index")){
				select.deselectByIndex(Integer.parseInt(value[0]));
			}else if (by.equals("value")){
				select.deselectByValue(value[0]);
			}else if (by.equals("text")){
				select.deselectByVisibleText(value[0]);
			}else if (by.equals("*")){
				select.deselectAll();
			}
		}else{
			Exception e = new Exception("The element is not SELECT Object");
			throw e;
		}
	}
	
	///
	///判断下拉框是否为多选
	///
	public boolean isMultiple() throws Exception
	{
		if (we.getTagName().equals("select")){
			Select select = new Select(we);
			if (select.isMultiple()){
				return true;
			}else{
				return false;
			}
		}else{
			Exception e = new Exception("The element is not SELECT Object");
			throw e;
		}
	}	
	
	///
	///获取select的当前选中值
	///
	public String getSelectedText() throws Exception
	{
		if (we.getTagName().equals("select")){
			String text = "";
			Select select = new Select(we);
			List<WebElement> options = select.getAllSelectedOptions();
			for (WebElement w : options){
				text += w.getText() + "\r\n";
			}
			return text;
		}else{
			Exception e = new Exception("The element is not SELECT Object");
			throw e;
		}
	}
	
	///
	///判断指定项是否存在
	///
	public boolean isInclude(String name) throws Exception
	{
		if (we.getTagName().equals("select")){
			Select select = new Select(we);
			List<WebElement> options = select.getOptions();
			for (WebElement w : options){
				if (w.getText().equals(name)){
					return true;
				}
			}
			return false;
		}else{
			Exception e = new Exception("The element is not SELECT Object");
			throw e;
		}
	}
	
	///
	///获取元素的tagname
	///
	public String getTagName(){
		return we.getTagName();
	}
	
	///
	///获取元素的id
	///
	public String getId(){
		return we.getId();
	}
	
	///
	///获取元素的绝对位置
	///
	public Point getLocation(){
		return we.getLocation();
	}
	
	///
	///获取元素的出现在屏幕可见区时的位置
	///
	public Point getLocationOnScreenOnceScrolledIntoView(){
		return we.getLocationOnScreenOnceScrolledIntoView();
	}
	
	///
	///获取元素的坐标
	///	
	public Coordinates getCoordinates(){
		return we.getCoordinates();
	}
	
	///
	///获取元素的大小
	///
	public Dimension getSize(){
		return we.getSize();
	}

	///
	///提交元素所在form的内容
	///	
	public void submit()
	{
		we.submit();
	}
	
	///
	///勾选radio、checkbox
	///
	public void check(String...values) throws Exception
	{
		if (we.getTagName().equals("input")){
			if (we.getAttribute("type").equals("radio")){
				WebDriver wd = we.getWrappedDriver();
				List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
				if (values[0].equals("index")){
					wl.get(Integer.parseInt(values[1])).click();
				}else if (values[0].equals("value")){
					for (WebElement w : wl){
						if (w.getAttribute("value").equals(values[1])){
							w.click();
							break;
						}
					}
				}
			}else if (we.getAttribute("type").equals("checkbox")){
				if (!we.isSelected()){
					we.click();
				}	
			}else{
				Exception e = new Exception("The element is not Radio or CheckBox Object");
				throw e;				
			}
		}else{
			Exception e = new Exception("The element is not INPUT Object");
			throw e;
		}
	}
	
	///
	///取消勾选checkbox
	///
	public void unCheck() throws Exception
	{
		if (we.getTagName().equals("input") && we.getAttribute("type").equals("checkbox")){
				if (we.isSelected()){
					we.click();
				}				
		}else{
			Exception e = new Exception("The element is not CheckBox Object");
			throw e;
		}
	}
	
	///
	///checkbox、radio是否勾选
	///
	public boolean isChecked(String...values) throws Exception
	{
		if (we.getTagName().equals("input")){
			if (we.getAttribute("type").equals("radio")){
				WebDriver wd = we.getWrappedDriver();
				List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
				if (values[0].equals("index")){
					return wl.get(Integer.parseInt(values[1])).isSelected();
				}else if (values[0].equals("value")){
					for (WebElement w : wl){
						if (w.getAttribute("value").equals(values[1])){
							return w.isSelected();
						}
					}
				}
				return false;
			}else if (we.getAttribute("type").equals("checkbox")){
				return we.isSelected();
			}else{
				Exception e = new Exception("The element is not Radio or CheckBox Object");
				throw e;				
			}
		}else{
			Exception e = new Exception("The element is not INPUT Object");
			throw e;
		}		
	}

	///
	///把元素滚动到可视区
	///
	public void scroll()
	{
		this.focus();
	}
	
	///
	///高亮元素
	///
	public void highLight() throws InterruptedException
	{
		this.focus();
		JavascriptExecutor js = getJSE();
		String old_style = we.getAttribute("style");
		for (int i = 0; i < 3; i++) { 			 
			js.executeScript("arguments[0].setAttribute(''style'', arguments[1]);", this.we, "background-color: red; border: 2px solid red;" + old_style); 
			Thread.sleep(500);
			js.executeScript("arguments[0].setAttribute(''style'', arguments[1]);", this.we, old_style); 
			Thread.sleep(500);
		}
	}

	///
	///触发元素的特定事件
	///
	public void fireEvent(String event){
		JavascriptExecutor js = getJSE();
		js.executeScript(String.format("arguments[0].%s()", event), this.we);
	}
	
	///
	///使元素获取焦点
	///
	public void focus(){
//		this.we.sendKeys("");
		JavascriptExecutor js = getJSE();
		js.executeScript("arguments[0].focus();", this.we);
	}	
	
	///
	///对元素执行JavaScript操作;即执行元素的dom操作
	///
	public void executeJS(String commands){
		JavascriptExecutor js = getJSE();	
		String[] comandArr = commands.split(";");
		commands = "";
		for (String comand : comandArr){
			if (!comand.trim().equals("")){
				commands += String.format("arguments[0].%s;", comand);
			}
		}
		if (!commands.equals("")){
			js.executeScript(commands, this.we);
		}
	}
	
	///
	///获取原始的RemoteWebElement对象
	///
	public RemoteWebElement getNativeWebElement(){
		return this.we;
	}
		
	private JavascriptExecutor getJSE(){
		if (this.isExist()){
			if (this.jse == null){
				WebDriver wd = we.getWrappedDriver();
				this.jse = (JavascriptExecutor) wd;				
			}		
		}
		return jse;
	}
	
	private String setBackground(String color){
		JavascriptExecutor js = getJSE();
		String old_bg = we.getCssValue("background-color");
		js.executeScript("arguments[0].style.background = arguments[1];", this.we, color); 
		return old_bg;
	}		
	
}

org.openqa.selenium.WebElement的实例源码

org.openqa.selenium.WebElement的实例源码

项目:marathonv5    文件:JavaDriverTest.java   
public void click() throws Throwable {
    driver = new JavaDriver();
    SwingUtilities.invokeAndWait(new Runnable() {
        @Override public void run() {
            frame.setLocationRelativeto(null);
            frame.setVisible(true);
        }
    });
    WebElement element1 = driver.findElement(By.name("click-me"));
    element1.click();
    AssertJUnit.assertTrue(buttonClicked);
    buttonClicked = false;
    new Actions(driver).click().perform();
    AssertJUnit.assertTrue(buttonClicked);
    AssertJUnit.assertTrue(buttonMouseActions.toString().contains("clicked(1)"));
    buttonMouseActions.setLength(0);
    new Actions(driver).contextClick().perform();
    AssertJUnit.assertTrue(buttonMouseActions.toString(),buttonMouseActions.toString().contains("pressed(3-popup)"));
}
项目:ats-framework    文件:HiddenHtmlTable.java   
/**
 * @return how many rows this table has
 */
@Override
@PublicAtsApi
public int getRowCount() {

    new HiddenHtmlElementState(this).waitToBecomeExisting();

    String css = this.getElementProperty("_css");

    List<WebElement> elements = null;

    if (!StringUtils.isNullOrEmpty(css)) {
        css += " tr";
        elements = webDriver.findElements(By.cssSelector(css));
    } else {
        // get elements matching the following xpath
        elements = webDriver.findElements(By.xpath(properties.getInternalProperty(HtmlElementLocatorBuilder.PROPERTY_ELEMENT_LOCATOR)
                                                   + "/tr | "
                                                   + properties.getInternalProperty(HtmlElementLocatorBuilder.PROPERTY_ELEMENT_LOCATOR)
                                                   + "/*/tr"));
    }

    return elements.size();
}
项目:testing_security_development_enterprise_systems    文件:GitCrawler.java   
private static WebElement getElement(WebDriver driver,By by,int current){

        WebElement element = null;

        while(true) {
            try {
                element = driver.findElement(by);
            } catch (Exception e){
                //might happen due to Github blocking crawling
                try {
                    long time = 60_000;
                    System.out.println("Cannot find -> "+by.toString()+"\n Going to wait for "+time+"ms");
                    Thread.sleep(time);
                    openPagedSearchResult(driver,current);
                } catch (InterruptedException e1) {
                }
                continue;
            }
            break;
        }

        return element;
    }
项目:ats-framework    文件:RealHtmlElement.java   
/**
 * Drag and drop an element on top of other element
 * @param targetElement the target element
 */
@Override
@PublicAtsApi
public void dragAndDropTo(
                           HtmlElement targetElement ) {

    new RealHtmlElementState(this).waitToBecomeExisting();

    WebElement source = RealHtmlElementLocator.findElement(this);
    WebElement target = RealHtmlElementLocator.findElement(targetElement);

    Actions actionBuilder = new Actions(webDriver);
    Action dragAndDropAction = actionBuilder.clickAndHold(source)
                                            .movetoElement(target,1,1)
                                            .release(target)
                                            .build();
    dragAndDropAction.perform();

    // drops the source element in the middle of the target,which in some cases is not doing drop on the right place
    // new Actions( webDriver ).dragAndDrop( source,target ).perform();
}
项目:marathonv5    文件:JavaDriverTest.java   
public void isEnabled() throws Throwable {
    driver = new JavaDriver();
    SwingUtilities.invokeAndWait(new Runnable() {
        @Override public void run() {
            frame.setLocationRelativeto(null);
            frame.setVisible(true);
        }
    });
    WebElement element1 = driver.findElement(By.name("click-me"));
    AssertJUnit.assertTrue(element1.isEnabled());
    SwingUtilities.invokeAndWait(new Runnable() {
        @Override public void run() {
            button.setEnabled(false);
        }
    });
    EventQueueWait.waitTilldisabled(button);
    AssertJUnit.assertFalse(element1.isEnabled());
}
项目:selenide-appium    文件:SelenideAppiumFieldDecorator.java   
@Override
public Object decorate(ClassLoader loader,Field field) {
  By selector = new Annotations(field).buildBy();
  if (selector instanceof ByIdOrName) {
    // throw new IllegalArgumentException("Please define locator for " + field);
    return decorateWithAppium(loader,field);
  } else if (WebElement.class.isAssignableFrom(field.getType())) {
    return ElementFinder.wrap(searchContext,selector,0);
  } else if (ElementsCollection.class.isAssignableFrom(field.getType())) {
    return new ElementsCollection(new BySelectorCollection(searchContext,selector));
  } else if (ElementsContainer.class.isAssignableFrom(field.getType())) {
    return createElementsContainer(selector,field);
  } else if (isDecoratableList(field,ElementsContainer.class)) {
    return createElementsContainerList(field);
  } else if (isDecoratableList(field,SelenideElement.class)) {
    return SelenideElementListProxy.wrap(factory.createLocator(field));
  }

  return decorateWithAppium(loader,field);
}
项目:SneakerBot    文件:Adidas.java   
public void atc() {
    webdriverwait wait = new webdriverwait(driver,300L);

    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@and (.//span[text()[contains(.,'Size')]] or .//span[text()[contains(.,'size')]])]")));

    int index = new Random().nextInt(sizes.length);
    String sizetoPick = Double.toString(sizes[index]);

    for(WebElement e : driver.findElements(By.xpath("//div[@and .//ul[.//li[.//span[text()[contains(.,'size')]]]]]/ul/li"))) {
        String size = e.getText().trim();
        if(size != null && size.equals(sizetoPick)) {
            e.click();
            break;
        }
    }   
}
项目:ats-framework    文件:RealHtmlMultiSelectList.java   
/**
 * select a value
 *
 * @param value the value to select
 */
@Override
@PublicAtsApi
public void setValue(
                      String value ) {

    new RealHtmlElementState(this).waitToBecomeExisting();

    try {
        WebElement element = RealHtmlElementLocator.findElement(this);
        Select select = new Select(element);
        select.selectByVisibleText(value);
    } catch (NoSuchElementException nsee) {
        throw new SeleniumOperationException("Option with label '" + value + "' not found. ("
                                             + this.toString() + ")");
    }
    UiEngineUtilities.sleep();
}
项目:POM_HYBRID_FRAMEOWRK    文件:FlightReservation_Login.java   
private WebElement get_password() {
    WebElement element = null;
    if (WebUtilities.waitForElementToAppear(driver,password,logger)) {
        element = password;
    }
    return element;
}
项目:AutomationFrameworkTPG    文件:BasePage.java   
protected void waitForElementToNotExist(WebElement element) {
    new webdriverwait(getDriverProxy(),20)
    .withMessage("Timed out waiting for element to not exist.")
    .until((WebDriver d) -> {
        boolean conditionMet = false;
        try {
            // We don't really care whether it's displayed or not,just if it exists.
            element.isdisplayed();
        } catch (NoSuchElementException | StaleElementReferenceException e) {
            conditionMet = true;
        }
        return conditionMet;
    });
}
项目:BrainBridge    文件:BrainInstance.java   
/**
 * Posts the given message to the brain chat.
 * 
 * @param message
 *            The message to post
 */
public void postMessage(final String message) {
    updateLastUsage();
    switchToWindow();
    switchToFrame(CHAT_INPUT_FRAME_NAME);

    final WebElement input = new NamePresenceWait(this.mDriver,CHAT_INPUT_NAME).waitUntilCondition();
    input.sendKeys(message);
    input.sendKeys(Keys.ENTER);
}
项目:POM_HYBRID_FRAMEOWRK    文件:MouSEOperations.java   
public static void hoverMouSEOnWebElement(WebDriver driver,ExtentTest logger,WebElement element) {
    try {
        Actions action = new Actions(driver);
        action.movetoElement(element).build().perform();
    } catch (Exception e) {
        logger.log(LogStatus.ERROR,"Error hovering over the element</br>" + e.getCause());
    }
}
项目:Selenium-Foundation    文件:WebDriverUtils.java   
/**
 * Remove hidden elements from specified list
 * 
 * @param elements list of elements
 * @return 'true' if no visible elements were found; otherwise 'false'
 */
public static boolean filterHidden(List<WebElement> elements) {
    Iterator<WebElement> iter = elements.iterator();
    while (iter.hasNext()) {
        if ( ! iter.next().isdisplayed()) {
            iter.remove();
        }
    }
    return elements.isEmpty();
}
项目:marathonv5    文件:JMenuHorizontalTest.java   
public void clicksOnMenus() throws Throwable {
    driver = new JavaDriver();
    List<WebElement> menus = driver.findElements(By.cssSelector("menu"));
    int i = 0;
    clicksOnMenu(menus,i++,"Menu 1");
    clicksOnMenu(menus,"Menu 2");
    clicksOnMenu(menus,"Menu 3");
}
项目:kheera    文件:TestExecutionController.java   
@Override
public boolean checkCssClassDoesNotContain(WebElement w,String... args) throws Exception {
    startTime();
    boolean result = currentPage.checkCssClassDoesNotContain(w,args);
    this.setNextPage();
    return result;
}
项目:ats-framework    文件:RealHtmlElement.java   
/**
 * Simulate Tab key
 */
@Override
@PublicAtsApi
public void presstabKey() {

    new RealHtmlElementState(this).waitToBecomeExisting();

    WebElement element = RealHtmlElementLocator.findElement(this);
    element.sendKeys(Keys.TAB);
}
项目:Cognizant-Intelligent-Test-Scripter    文件:AutomationObject.java   
public WebElement findElement(SearchContext element,String objectKey,String pageKey,String Attribute,FindType condition) {
    pageName = pageKey;
    objectName = objectKey;
    findType = condition;
    return getElementFromList(findElements(element,getoRObject(pageKey,objectKey),Attribute));
}
项目:bootstrap    文件:TAbstractSeleniumTest.java   
@Test
public void testAssertElementAttribute() {
    final WebElement webElement = Mockito.mock(WebElement.class);
    Mockito.when(webElement.getAttribute(ArgumentMatchers.any())).thenReturn(null).thenReturn("value");
    Mockito.when(mockDriver.findElement(ArgumentMatchers.any())).thenReturn(webElement);
    assertElementAttribute("value",null,null);
}
项目:marathonv5    文件:JTextAreaTest.java   
void getAttributes() throws Throwable {
    driver = new JavaDriver();
    WebElement textArea = driver.findElement(By.cssSelector("text-area"));
    AssertJUnit.assertEquals("true",textArea.getAttribute("editable"));
    textArea.sendKeys("Systems",Keys.SPACE);
    String prevIoUsText = textArea.getText();
    textArea.clear();
    textArea.sendKeys("Jalian" + prevIoUsText);
}
项目:spring-reactive-sample    文件:HomePage.java   
public List<Attribute> attributes() {
    List<Attribute> rows = new ArrayList<>();
    for (WebElement tr : this.trs) {
        rows.add(new Attribute(tr));
    }
    this.attributes.addAll(rows);
    return this.attributes;
}
项目:Selenium-Foundation    文件:JsUtilityTest.java   
private String getMetaTagNamed(WebDriver driver,String name) {
    JsUtility.injectglueLib(driver);
    String script = JsUtility.getScriptResource("requireMetaTagByName.js");

    try {
        WebElement response = JsUtility.runAndReturn(driver,script,name);
        return response.getAttribute("content");
    } catch (WebDriverException e) {
        throw JsUtility.propagate(e);
    }
}
项目:phoenix.webui.framework    文件:SeleniumIFrameLocator.java   
@Override
public WebElement findElement(SearchContext driver)
{
    if(!(driver instanceof WebDriver))
    {
        throw new IllegalArgumentException("Argument must be instanceof WebDriver.");
    }

    WebDriver webDriver = (WebDriver) driver;

    webDriver = engine.turnToRootDriver(webDriver);
    if(!iframeWait(webDriver,getTimeout(),getValue()))
    {
        webDriver.switchTo().frame(getValue());
    }

    return null;
}
项目:SWET    文件:SwetTest.java   
@Test
public void testChangeElementSelectedBy() {
    driver.get(utils.getResourceURI("ElementSearch.html"));
    utils.injectScripts(Optional.<String> empty());
    WebElement target = wait.until(
            ExpectedConditions.visibilityOf(driver.findElement(By.tagName("h1"))));
    utils.highlight(target);
    // Act
    utils.inspectElement(target);
    // Assert
    List<String> labels = driver
            .findElements(By.cssSelector("form#SWDForm label[for]")).stream()
            .map(e -> e.getAttribute("for")).collect(Collectors.toList());

    String lastLabel = null;
    Collections.sort(labels,String.CASE_INSENSITIVE_ORDER);
    for (String label : labels) {
        utils.sleep(100);
        WebElement radioElement = wait.until(ExpectedConditions.visibilityOf(
                driver.findElement(By.xpath(String.format("//*[@id='%s']",label)))));
        assertthat(radioElement,notNullValue());
        radioElement.click();
        lastLabel = label;
    }
    utils.completeVisualSearch("changing strategy attribute");
    // Assert
    String payload = utils.getPayload();
    assertFalse(payload.isEmpty());
    Map<String,String> details = new HashMap<>();
    utils.readData(payload,Optional.of(details));
    verifyNeededKeys(details);
    verifyEntry(details,"ElementSelectedBy",lastLabel);
}
项目:hippo    文件:DatasetPageElements.java   
@Override
public WebElement getElementByName(String elementName,int nth,WebDriver webDriver) {
    List<WebElement> elements = webDriver.findElements(pageElements.get(elementName));

    if (elements.size() == 0) {
        return null;
    }

    return elements.get(nth);
}
项目:selenium-toys    文件:TypeTest.java   
@Test
public void ontest() {
  final WebDriver webDriver = Mockito.mock(WebDriver.class);
  final WebElement webElement = Mockito.mock(WebElement.class);

  final Type type = new Type(webDriver,"text",() -> {});
  final By byId = By.id("id");
  Mockito.when(webDriver.findElement(byId)).thenReturn(webElement);
  type.on(byId);
  Mockito.verify(webElement).sendKeys("text");
}
项目:marathonv5    文件:JavaDriverTest.java   
public void getLocation() throws Throwable {
    driver = new JavaDriver();
    SwingUtilities.invokeAndWait(new Runnable() {
        @Override public void run() {
            frame.setLocationRelativeto(null);
            frame.setVisible(true);
        }
    });
    WebElement element1 = driver.findElement(By.name("click-me"));
    Point location = element1.getLocation();
    java.awt.Point p = EventQueueWait.call(button,"getLocation");
    AssertJUnit.assertEquals(p.x,location.x);
    AssertJUnit.assertEquals(p.y,location.y);
}
项目:POM_HYBRID_FRAMEOWRK    文件:FlightReservation_Login.java   
private WebElement get_signInButton() {
    WebElement element = null;
    if (WebUtilities.waitForElementToAppear(driver,signInButton,logger)) {
        element = signInButton;
    }
    return element;
}
项目:BrainBridge    文件:BrainInstance.java   
/**
 * Shuts this instance down and frees all used resources.
 */
public void shutdown() {
    switchToWindow();
    switchToFrame(CHAT_INPUT_FRAME_NAME);

    final WebElement logoutAnchor = new CSSSelectorPresenceWait(this.mDriver,logoUT_ANCHOR).waitUntilCondition();
    logoutAnchor.click();

    this.mDriver.close();
}
项目:hippo    文件:SiteSteps.java   
@Then("I can download(?: following files)?:")
public void iCanDownload(final DataTable downloadTitles) throws Throwable {
    for (List<String> downloadLink : downloadTitles.asLists(String.class)) {
        String linkText = downloadLink.get(0);
        String linkFileName = downloadLink.get(1);

        WebElement downloadElement = sitePage.findElementWithTitle(linkText);

        assertthat("I can find download link with title: " + linkText,downloadElement,is(notNullValue()));

        String url = downloadElement.getAttribute("href");
        assertEquals("I can find link with expected URL for file " + linkFileName,URL + urlLookup.lookupUrl(linkFileName),url);

        if (acceptanceTestProperties.isHeadlessMode()) {
            // At the moment of writing,there doesn't seem to be any easy way available to force Chromedriver
            // to download files when operating in headless mode. It appears that some functionality has been
            // added to DevTools but it's not obvIoUs how to trigger that from Java so,for Now at least,// we'll only be testing file download when operating in a full,graphical mode.
            //
            // See bug report at https://bugs.chromium.org/p/chromium/issues/detail?id=696481 and other reports
            // available online.
            log.warn("Not testing file download due to running in a headless mode,will just check link is present.");
        } else {
            // Trigger file download by click the <a> tag.
            sitePage.clickOnElement(downloadElement);

            final Path downloadedFilePath = Paths.get(acceptanceTestProperties.getDownloadDir().toString(),linkFileName);

            waitUntilFileAppears(downloadedFilePath);
        }
    }
}
项目:ats-framework    文件:RealHtmlElement.java   
/**
 * Simulate mouse double click action
 */
@Override
@PublicAtsApi
public void doubleClick() {

    new RealHtmlElementState(this).waitToBecomeExisting();

    WebElement element = RealHtmlElementLocator.findElement(this);

    new Actions(webDriver).doubleClick(element).perform();
}
项目:bootstrap    文件:TAbstractSeleniumTest.java   
@Test
public void testAssertSelectedText() {
    final WebElement webElement = Mockito.mock(WebElement.class);
    Mockito.when(mockDriver.findElement(ArgumentMatchers.any())).thenReturn(webElement);
    Mockito.when(webElement.getTagName()).thenReturn("select");
    final List<WebElement> items = new ArrayList<>();
    items.add(webElement);
    Mockito.when(webElement.findElements(ArgumentMatchers.any())).thenReturn(items);
    Mockito.when(webElement.isSelected()).thenReturn(true);
    Mockito.when(webElement.getText()).thenReturn("text");
    assertSelectedText("text",null);
}
项目:devtools-driver    文件:ExampleMobileSafariWebTest.java   
public static void main(String[] args) throws Exception {
  // Create a DesiredCapabilities object to request specific devices from the WebDriver server.
  // A udid can be optionally specified,otherwise an arbitrary device is chosen.
  DesiredCapabilities caps = new DesiredCapabilities();
  // caps.setCapability("uuid",udid);
  // Start a WebDriver session. The local machine has to be running the SafariDriverServer,or
  // change localhost below to an IP running the SafariDriverServer.
  driver = new RemoteWebDriver(new URL("http://localhost:5555/wd/hub"),caps);
  // Connect to a URL
  driver.get("http://www.google.com");

  // Interact with the web page. In this example use case,the Webdriver API is used to find
  // specific elements,test a google search and take a screenshot.
  driver.findElement(By.id("hplogo"));

  // Google New York
  WebElement mobileSearchBox = driver.findElement(By.id("lst-ib"));
  mobileSearchBox.sendKeys("New York");
  WebElement searchBox;
  try {
    searchBox = driver.findElement(By.id("tsbb"));
  } catch (NoSuchElementException e) {
    searchBox = driver.findElement(By.name("btnG"));
  }
  searchBox.click();

  takeScreenshot();
  driver.navigate().refresh();
  takeScreenshot();

  // Quit the WebDriver instance on completion of the test.
  driver.quit();
  driver = null;
}
项目:teasy    文件:SelectImpl.java   
@Override
public void selectByAnotherTextThan(final String text) {
    final org.openqa.selenium.support.ui.Select select = wrappedSelect();
    final List<WebElement> options = select.getoptions();
    for (int i = options.size() - 1; i >= 0; i--) {
        final WebElement each = options.get(i);
        if (!each.getText().equals(text)) {
            select.selectByIndex(i);
            return;
        }
    }
}
项目:marathonv5    文件:JTableTest.java   
public void tableCellEditSelectByProps() throws Throwable {
    driver = new JavaDriver();
    String selector = "{ \"select\": \"{2,Sport}\" }";
    WebElement cell = driver.findElement(By.cssSelector("table::select-by-properties('" + selector + "')::editor"));
    AssertJUnit.assertEquals("text-field",cell.getTagName());
    cell.clear();
    cell.sendKeys("Hello World",Keys.ENTER);
    cell = driver.findElement(By.cssSelector("table::mnth-cell(3,3)"));
    AssertJUnit.assertEquals("Hello World",cell.getText());
    cell = driver.findElement(By.cssSelector("table::mnth-cell(3,5)"));
    AssertJUnit.assertEquals("boolean-renderer",cell.getTagName());
    cell = driver.findElement(By.cssSelector("table::mnth-cell(3,5)::editor"));
    AssertJUnit.assertEquals("check-Box",cell.getTagName());
}
项目:kheera    文件:TestExecutionController.java   
@Override
public boolean clickElement(WebElement w) throws Exception {
    startTime();
    boolean result = currentPage.clickElement(w);
    this.setNextPage();
    return result;
}
项目:SilkAppDriver    文件:ExceptionTests.java   
@After
public void closeApp() {
    WebElement fileMenu = driver.findElement(By.xpath("//Menu[@caption='File']"));
    fileMenu.click();

    WebElement exit = driver.findElement(By.xpath("//MenuItem[@caption='Exit']"));
    exit.click();

    driver.quit();
}
项目:marathonv5    文件:JMenuHorizontalTest.java   
private void assertClicksOnMenuItemsInSubMenu(WebElement menu) throws Throwable {
    menu.click();
    List<WebElement> includeSubMenus = driver.findElements(By.cssSelector("menu"));
    AssertJUnit.assertEquals(4,includeSubMenus.size());
    WebElement subMenu = includeSubMenus.get(3);
    AssertJUnit.assertEquals("Submenu",subMenu.getText());

    List<WebElement> menuItems = driver.findElements(By.cssSelector("menu-item"));
    AssertJUnit.assertEquals(3,menuItems.size());
    menu.click();

    assertClicks(menu,subMenu,3);
}
项目:colibri-ui-template    文件:AndroidDynamicFieldSteps.java   
@Step
@Then("значение динамического поля \"$field\" равно \"$expectedValue\"")
public void stepCheckValueInDynamicFields(@Named("$field") String field,@Named("$expectedValue") String expectedValue) {
    IElement parent = getCurrentPage().getElementByName(field);
    IElement nested = pageProvider.getPageByName(DYNAMIC_FIELDS_PAGE_NAME).getElementByName(EDIT_TEXT_NAME);
    WebElement elementFound = finder.findnestedWebElement(parent,nested);
    String actualElement = elementFound.getText();
    assertEquals(format("Значение поля [%s] не соответствует ожидаемому [%s]",actualElement,expectedValue),expectedValue,actualElement);
}
项目:marathonv5    文件:JavaDriverTest.java   
public void elementSendKeys() throws Throwable {
    driver = new JavaDriver();
    SwingUtilities.invokeAndWait(new Runnable() {
        @Override public void run() {
            frame.setLocationRelativeto(null);
            frame.setVisible(true);
        }
    });
    AssertJUnit.assertEquals("",EventQueueWait.call(textField,"getText"));
    WebElement element1 = driver.findElement(By.name("text-field"));
    element1.sendKeys("Hello"," ","World");
    AssertJUnit.assertEquals("Hello World","getText"));
}
项目:marathonv5    文件:JTableTest.java   
public void getheader() throws Throwable {
    driver = new JavaDriver();
    WebElement header = driver.findElement(By.cssSelector("table::header"));
    AssertJUnit.assertEquals(5 + "",header.getAttribute("count"));
    WebElement header2 = driver.findElement(By.cssSelector("table-header"));
    AssertJUnit.assertEquals(5 + "",header2.getAttribute("count"));
}

python – WebElement上的Selenium WebDriver“find_element_by_xpath”

python – WebElement上的Selenium WebDriver“find_element_by_xpath”

我正在尝试使用以下行查找元素:

elements = driver.find_elements_by_xpath("//div[@]")

一旦我有了元素,我知道有两个“显示”,我希望能够使用第二个,并在其中找到一个特定的元素,如下所示:

title = elements[1].find_element_by_xpath("//div[@]")

但是,它总是恢复使用第一个.我已经介入了它,它正在为“显示”找到2个元素,所以我不确定我做错了什么.

任何帮助将不胜感激.

最佳答案
我想你想要这个:

elements = driver.find_elements_by_xpath("//div[@]")
title = elements[1].find_elements_by_xpath(".//div[@]")

Selenium API-WebElement 属性

Selenium API-WebElement 属性

当我们使用 Selenium 的定位方法定位到元素之后,会返回一个 WebElement 对象(<class ''selenium.webdriver.remote.webelement.WebElement''>),该对象用来描述 Web 页面上的一个元素,那么,关于元素的常用属性,主要有:

序号方法/属性描述
1WebElement.id获取元素的标示
2WebElement.size获取元素的宽与高,返回一个字典
3WebElement.rect除了获取元素的宽与高,还获取元素的坐标
4WebElement.tag_name获取元素的标签名称
5WebElement.text获取元素的文本内容

WebElement.id

获取元素的标示:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_id("kw")  # 定位搜索输入框
print(element.id)  # 25c961a3-4d39-4e67-b1f6-b72c89058a29

driver.quit()  # 关闭浏览器

WebElement.size

获取元素的宽与高,返回一个字典类型数据:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_id("kw")  # 定位搜索输入框
print(element.size)  # {''height'': 44, ''width'': 548}

driver.quit()  # 关闭浏览器

WebElement.rect

获取元素宽与高的同时,还获取元素的坐标,同样返回的是一个字典类型数据:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_id("kw")  # 定位搜索输入框
print(element.rect)  # {''height'': 44, ''width'': 548, ''x'': 633, ''y'': 222.234375}

driver.quit()  # 关闭浏览器

WebElement.tag_name

获取元素的标签名称:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
element = driver.find_element_by_id("kw")  # 定位搜索输入框
print(element.tag_name)  # input

driver.quit()  # 关闭浏览器

WebElement.text

获取元素的文本值,无文本内容则返回空字符串:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.maximize_window()  # 浏览器最大化
driver.get("https://www.baidu.com/")  # 跳转至百度首页
sleep(1)
elements = driver.find_elements_by_xpath("//div[@id=''s-top-left'']/a")  # 定位搜索输入框
for element in elements:
    print(element.text)  # 新闻 hao123 地图 视频 贴吧 学术

driver.quit()  # 关闭浏览器

总结

今天关于使用多个条件在Selenium中查找WebElementselenium定位多个元素的讲解已经结束,谢谢您的阅读,如果想了解更多关于Java Selenium封装--RemoteWebElement、org.openqa.selenium.WebElement的实例源码、python – WebElement上的Selenium WebDriver“find_element_by_xpath”、Selenium API-WebElement 属性的相关知识,请在本站搜索。

本文标签: