天道酬勤,学无止境

WebDriver: add new element

Is there a method to add/insert an element in the current DOM?

标签

评论

Let me start by saying, this is a really bad idea. Think long and hard about why you want to do this. Then, if you still want to dynamically add elements, think about it some more. WebDriver is meant to mimic user interaction with your page, users don't typically add elements willy-nilly.

That said, if you're absolutely set on doing this I'd suggest using the JavascriptExecutor to add an element via JavaScript

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('myDiv').appendChild(document.createTextNode(' New Element'))")

It's ugly for a reason.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用Selenium Python WebDriver滚动网页(Scrolling web page using selenium python webdriver)
    问题 我正在抓取此网页中的用户名,该用户名在滚动后会加载用户 转到页面的网址:“ http://www.quora.com/Kevin-Rose/followers” 我知道页面上的用户数量(在这种情况下,编号为43812)如何滚动页面,直到所有用户都加载完毕? 我已经在互联网上搜索了相同的内容,并且到处都可以找到几乎相同的代码行: driver.execute_script(“ window.scrollTo(0,)”) 如何确定垂直位置以确保所有用户都被装载? 还有其他选项可以实现相同的功能而无需实际滚动吗? from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import urllib driver = webdriver.Firefox() driver.get('http://www.quora.com/') time
  • Selenium WebDriver-如何使用C#设置页面加载超时(Selenium WebDriver - How to set Page Load Timeout using C#)
    问题 我正在使用Selenium 2.20 WebDriver用C#创建和管理firefox浏览器。 要访问页面,我使用以下代码,在访问URL之前设置驱动程序超时: driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5)); // Set script timeouts to 5 secs driver.Navigate().GoToUrl(myUrl); // Goto page url 问题在于,有时页面要花很长时间才能加载,并且似乎使用selenium WebDriver加载页面的默认超时是30秒,这太长了。 而且我不相信我设置的超时适用于使用GoToUrl()方法加载页面。 因此,我试图弄清楚如何设置要加载的页面的超时时间,但是,我找不到实际起作用的任何属性或方法。 默认的30秒超时似乎也适用于我单击某个元素时的情况。 有没有一种方法可以将页面加载超时设置为特定值,以便当我调用GoToUrl()方法时,它仅等待指定的时间后才能继续? 回答1 driver.Manage()
  • 带Java的Selenium Webdriver:使用一个命令查找具有多个类名称的元素(Selenium Webdriver w/Java: locating elements with multiple class names with one command)
    问题 我正在尝试使用Selenium(2.31.0,使用JavaSE 1.6和IE9)在页面上查找一系列元素。 这些元素都具有两个类名称之一,即“ dataLabel”或“ dataLabelWide”。 当前,我的代码将这些元素收集在两个单独的ArrayList中,每个类名一个,然后将它们转换为数组并将它们组合为一个数组。 但是,此方法无序列出了元素,我需要将其按与页面HTML源代码中找到的顺序相同的顺序保留。 我的代码的上述部分看起来像这样(添加了注释以供解释): // Application runs on WebDriver d, an InternetExplorerDriver. // After navigating to the page in question... List<WebElement> labels = d.findElements(By.className("dataLabel")); List<WebElement> wLabels = d.findElements(By.className("dataLabelWide")); // Locates the elements of either type by their respective class name. WebElement[] labelsArray = labels
  • python爬虫-selenium 的基本使用和常用API
    python爬虫-selenium 的基本使用和常用API python爬虫-pyppeteer常用API 注意: 很多网站对selenium的webdriver做了反爬,所以推荐使用pyppeteer(更强大些)。 但是pyppeteer不如selenium稳定,bug少,语法清晰。 安装 pip3 install selenium 注意需要保持chrome和chromedriver 的版本一致 使用 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') # 这个配置很重要 chrome_options.add_argument('blink-settings=imagesEnabled=false') chrome_options.add_argument('user-agent={}'.format(getRandomUserAgent())) chrome_options.add_experimental_option('excludeSwitches', ['enable
  • Scrolling web page using selenium python webdriver
    I am scraping this webpage for usernames which loads the users after scrolling Url to page : "http://www.quora.com/Kevin-Rose/followers" I know the number of users on the page (in this case no. is 43812) How can I scroll the page till all the users are loaded? I have searched for the same on the internet and everywhere I got almost same line of code for doing it which is: driver.execute_script("window.scrollTo(0, )") How can I determine the vertical position to ensure that all the users are loaded? Is there any other option to achieve the same thing without actually scrolling? from selenium
  • Cannot click html element with watir
    I want to click the "button" below, but cannot click it. The html is: <table onclick="filtersJob_intrinsic_extender.addRow();return false;" class="FilterList_addLink"> <tbody> <tr> <td class="icon"><img src="/commander/lib/images/icn12px_add.gif" alt="Add Filter"></td> <td class="text">Add Intrinsic Filter</td> </tr> </tbody> </table> I am basically doing this with watir and watir-webdriver: browser.td(:text => 'Add Intrinsic Filter').click I tried this method on another similar button in another website and it worked. I wonder why it does not work here. It causes the exception: Selenium
  • 【软件测试】自动化测试webdriver常用API总结
    目录 1. selenium的简单介绍 2. selnium的下载 2.1 Python中的下载 2.2 安装selenium IDE 3. WebDriver常用API 3.1 脚本简单应用的介绍 3.2 元素的定位 3.2.1 id和name定位 3.2.2 tag name 和class name 定位 3.2.3 CSS定位 3.2.4 通过XPath定位 3.2.5 link text定位 3.2.6 partial link text定位 3.3 操作测试对象 3.3.1 鼠标点击与键盘输入 3.3.2 submit提交表单 3.3.3 text获取元素文本 3.3.4 添加等待 3.3.5 打印信息 3.4 浏览器的操作 3.4.1 浏览器最大化/最小化/设置浏览器的宽、高 3.4.2 浏览器的前进、后退 3.4.3 控制浏览器滚动条 3.4.4 键盘事件 3.5 鼠标事件 3.6 定位一组元素 3.7 多层框架/窗口定位 3.8 层级定位 3.9 下拉框处理 3.10 alert、confirm、prompt的处理 3.11 DIV对话框的处理 3.12 上传文件操作 1. selenium的简单介绍 selenium 是一个强大的开源web功能测试工具系列,支持多平台、多浏览器、多语言去实现自动化测试;支持多种开发语言:Python、Java
  • Selenium WebDriver StaleElementReferenceException(Selenium WebDriver StaleElementReferenceException)
    问题 运行测试时出现此错误:org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM 关于如何解决上述异常的任何想法? 这发生在我的网格中,该网格具有动态的ref Xpath表达式 回答1 我遇到了同样的问题,找不到任何解决方案。 提出一个解决方案并将其发布在此处,希望这对遇到相同问题的人有所帮助。 我创建了一个类来处理过时的元素,具体取决于它们的类型,cssselector,id等,并像调用其他任何页面对象一样简单地对其进行调用。 public void StaleElementHandleByID (String elementID) { int count = 0; boolean clicked = false; while (count < 4 && !clicked) { try { WebElement yourSlipperyElement= driver.findElement(By.id(elementID)); yourSlipperyElement.click(); clicked = true; } catch (StaleElementReferenceException e) { e.toString(); System.out.println("Trying to recover
  • Selenium —如何等待页面完全加载完毕(Selenium — How to wait until page is completely loaded [duplicate])
    问题 这个问题已经在这里有了答案: 等待Selenium中的页面加载(48个答案) 4年前关闭。 我正在尝试使用Java和Selenium WebDriver自动化一些测试用例。 我有以下情况: 有一个名为“产品”的页面。 当我单击“产品”页面中的“查看详细信息”链接时,将出现一个包含项目详细信息的弹出窗口(模态对话框)。 当我单击弹出窗口中的“关闭”按钮时,弹出窗口关闭,页面自动刷新(页面只是重新加载,内容保持不变)。 关闭弹出窗口后,我需要在同一页面上单击“添加项目”按钮。 但是,当WebDriver尝试查找“添加项目”按钮时,如果互联网速度太快,WebDriver可以找到并单击该元素。 但是,如果互联网速度较慢,WebDriver会在刷新页面之前找到该按钮,但是只要WebDriver单击该按钮,页面就会刷新, StaleElementReferenceException会发生StaleElementReferenceException 。 即使使用了不同的等待,所有的等待条件都变为true(因为页面的内容在重新加载之前和之后都是相同的),即使在重新加载页面之前StaleElementReferenceException发生StaleElementReferenceException 。 如果Thread.sleep(3000);则测试用例工作正常Thread.sleep
  • How do I set an option as selected using Selenium WebDriver (selenium 2.0) client in ruby
    I am trying to get familiar with the new ruby selenium-webdriver as it appears more intuitive mostly than the previous version of selenium and the ruby driver that went with it. Also, i had trouble getting the old selenium to work with ruby 1.9.1 in windows so I thought i'd look for an alternative. So far i've done this with my script: require "selenium-webdriver" driver = Selenium::WebDriver.for :firefox driver.get "https://example.com" element = driver.find_element(:name, 'username') element.send_keys "mwolfe" element = driver.find_element(:name, 'password') element.send_keys "mypass" driver
  • Selenium WebDriver放大/缩小页面内容(Selenium WebDriver zoom in/out page content)
    问题 如何在Selenium WebDriver中更改页面缩放级别? 我试过: driver.Keyboard().pressKey(Keys.Control); driver.Keyboard().pressKey(Keys.Add); 但这是行不通的。 回答1 请注意,Selenium假定缩放级别为100%! 例如,当缩放级别不同时,IE将拒绝启动(引发异常),因为元素的位置取决于此,并且如果您更改了缩放级别,它将在错误的位置单击错误的元素。 爪哇 您可以使用Keys.chord()方法: WebElement html = driver.findElement(By.tagName("html")); html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD)); 请谨慎使用,并在完成后将缩放比例重置为100%: html.sendKeys(Keys.chord(Keys.CONTROL, "0")); C# (因为我意识到C#绑定没有Keys.chord()方法) 或者,您可以像这样使用Advanced User Interactions API(同样,使用Java代码,但是在C#中应该可以使用相同的功能): WebElement html = driver.findElement(By.tagName("html")); new
  • 如何使用Selenium Webdriver捕获特定元素而不是整个页面的屏幕截图?(How to capture the screenshot of a specific element rather than entire page using Selenium Webdriver?)
    问题 目前,我正在尝试使用Selenium WebDriver捕获屏幕截图。 但是我只能获取整个页面的屏幕截图。 但是,我想要的只是捕获页面的一部分,或者仅捕获基于ID或任何特定元素定位符的特定元素。 (例如,我希望捕获图像ID =“ Butterfly”的图片) 有什么方法可以按选定的项目或元素捕获屏幕截图吗? 回答1 我们可以通过裁剪整个页面截图来获得元素截图,如下所示: driver.get("http://www.google.com"); WebElement ele = driver.findElement(By.id("hplogo")); // Get entire page screenshot File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); BufferedImage fullImg = ImageIO.read(screenshot); // Get the location of element on the page Point point = ele.getLocation(); // Get width and height of the element int eleWidth = ele.getSize().getWidth(); int
  • 如何强制Selenium WebDriver单击当前不可见的元素?(How to force Selenium WebDriver to click on element which is not currently visible?)
    问题 我正在将Selenium 2 Java API与FirefoxDriver结合使用。 当我填写表格时,复选框会根据表格输入内容添加到页面中。 我想使用Selenium模拟对这些复选框的单击。 该元素在常规浏览器中可见且可用,但是selenium断言该元素不可见。 "Element is not currently visible and so may not be interacted with" 我可以强迫硒忽略元素的不可见状态吗? 如何强制Selenium与不可见元素进行交互? 回答1 Selenium根据以下条件确定元素是否可见(使用DOM检查器确定哪些CSS适用于您的元素,请确保您查看计算的样式): 可见度!=隐藏显示!=无(还将针对每个父元素进行检查) opacity!= 0(不检查是否单击元素) 高度和宽度均> 0 对于输入,属性类型!=隐藏 您的元素符合这些条件之一。 如果您没有能力更改元素的样式,请按照以下方法用javascript强制执行此操作(由于您使用了Selenium2 API,因此假设使用了WebDriver): ((JavascriptExecutor)driver).executeScript("arguments[0].checked = true;", inputElement); 但这不会触发javascript事件
  • Selenium WebDriver:流畅的等待按预期方式工作,但隐式等待不起作用(Selenium WebDriver: Fluent wait works as expected, but implicit wait does not)
    问题 我是Selenium WebDriver的新手,正在尝试了解“等待”元素出现的正确方法。 我正在测试一个带有单选按钮答案的问题的页面。 选择答案时,JavaScript可能启用/禁用页面上的某些问题。 问题似乎在于Selenium的“单击速度太快”,而不是等待Javascript完成。 我尝试用两种方法解决此问题-显式等待解决了问题。 具体来说,这可以解决我的问题: private static WebElement findElement(final WebDriver driver, final By locator, final int timeoutSeconds) { FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(timeoutSeconds, TimeUnit.SECONDS) .pollingEvery(500, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class); return wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver webDriver) { return
  • 在运行时突出显示WebDriver中的元素(Highlight elements in WebDriver during runtime)
    问题 有人可以帮忙吗? 在WebDriver中执行测试期间,如何在下一个类中突出显示所有Web元素? 对于Selenium RC,这是相当简单的,但是对于WebDriver,我却很挣扎。 如果有人可以为我提供一些我可以尝试的代码,以及该代码在下面的类中的合适位置,我将不胜感激-抱歉,我的Java技能还不是很好。 package hisScripts; import java.util.concurrent.TimeUnit; import org.testng.annotations.*; import org.testng.Assert; import static org.testng.Assert.fail; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.interactions.Actions; public class R_LHAS_Only_Account_Verification extends HIS_Login_Logout{ public WebDriver driver; public
  • Selenium自动化爬虫
    Python爬虫入门之 Selenium自动化爬虫 Selenium官方文档 1. Selenium的安装配置 pip install selenium selenium配置 2. 基本请求 from selenium import webdriver # 创建实例 browser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.xxx() # 浏览器窗口最大化 browser.maximize_window() # 请求百度首页 browser.get("https://movie.douban.com/top250") # 关闭当前页面 browser.close() # 退出浏览器 browser.quit() 3. 常用操作 浏览器方法 浏览器方法作用browser.get(url)请求urlbrowser.quit()关闭浏览器browser.close()关闭当前页面browser.page_source获取源码browser.page_source.find(‘keyword’)在源码中查找browser.maximize_window() - 浏览器窗口最大化窗口最大化 节点操作: 节点操作作用node.send_keys(’’)在文本框填写内容node.click(
  • Selenium Webdriver w/Java: locating elements with multiple class names with one command
    I'm trying to use Selenium (2.31.0, using JavaSE 1.6 and IE9) to find a series of elements on a page. These elements all have one of two class names, 'dataLabel' or 'dataLabelWide'. Currently, my code collects these elements in two separate ArrayLists, one for each class name, then converts them to arrays and combines them into one array. This method, however, lists the elements out of order, and I need them to be left in the same order as they're found in the page's HTML source. The above-mentioned section of my code looks like this (with comments added for explanation): // Application runs
  • How to turn off w3c in chromedriver to address the error unknown command: Cannot call non W3C standard command while in W3C
    With version 75 of Chrome just released, our tests no longer run properly. They give the stacktrace pasted below. We are using ruby on rails v. 5.1.6.2 with rspec, selenium-webdriver 3.8.0. Stacktrace: Selenium::WebDriver::Error::UnknownCommandError: unknown command: Cannot call non W3C standard command while in W3C mode # 0 chromedriver 0x000000010c46e8e9 chromedriver + 3594473 # 1 chromedriver 0x000000010c3fe543 chromedriver + 3134787 # 2 chromedriver 0x000000010c1aa29f chromedriver + 692895 # 3 chromedriver 0x000000010c11a691 chromedriver + 104081 # 4 chromedriver 0x000000010c11b7d5
  • 我如何找到一个自定义标签,如 ?(How do I locate a custom tag like <g>?)
    问题 我不得不处理页面中带有<g>标签的一些图形项目。 我可以通过放入 selenium webdriver 来做类似的事情来找到它们: browser.wd.find_elements( :tag_name => "g" ) watir webdriver 的等价物是什么? 另外,我如何将这些硒元素转换为 watir 元素? 我可以以某种方式在本地添加对<g>标签的支持吗? 回答1 解决方案 1 - Watir-Webdriver 等效项: 与您在 selenium-webdriver 中所做的等效的是: browser.elements( :tag_name => "g" ) 所以你可以做这样的事情来输出每个元素的文本: browser.elements( :tag_name => "g" ).each do |x| puts g.text end 解决方案 2 - 添加对 G 元素的支持: 在需要 watir-webdriver 后,添加以下代码: module Watir module Container def g(*args) G.new(self, extract_selector(args).merge(:tag_name => "g")) end def gs(*args) GCollection.new(self, extract_selector(args)
  • 扩展Selenium WebDriver WebElement?(Extend Selenium WebDriver WebElement?)
    问题 我遵循Selenium建议的Page Object模式,但是如何为页面创建更专业的WebElement。 具体来说,我们在页面上有表格,并且我编写了一些帮助函数来获取表格的特定行,返回表格的内容等。 当前,这是我创建的具有表格的页面对象的片段: public class PermissionsPage { @FindBy(id = "studyPermissionsTable") private WebElement permissionTable; @FindBy(id = "studyPermissionAddPermission") private WebElement addPermissionButton; ... } 因此,我想做的就是让该PermissionsTable成为一个更自定义的WebElement,其中包含我前面提到的一些方法。 例如: public class TableWebElement extends WebElement { WebElement table; // a WebDriver needs to come into play here too I think public List<Map<String, String>> getTableData() { // code to do this } public int