基于用户在搜索引擎上的输入,我试图通过多个层次从网站上的搜索结果中提取数据。用户的搜索结果可能会有所不同,所以我决定使用PageObject设计模式来扩展我的项目,但我不理解Python Selenium教程以及元素是如何定义的。py文件和页面。py文件交互,以便我可以根据自己的喜好编辑它们。
我将遵循以下教程:https://selenium-python.readthedocs.io/page-objects.html
BasePageElement是什么?这个文件只适用于网页垃圾的第一层吗?我是否应该复制BasePageElement类并将其编辑到网站的下一层?有没有更好的解释元素是什么。py文件实际上在做什么?
页面Stackoveflow
的示例
但目前的课程对我来说有两个问题:
>
BasePageElement
在单个元素上搜索,因此在搜索页面上获取所有结果是无用的。
它将需要其他类使其更有用。
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
from selenium.common.exceptions import NoSuchElementException, TimeoutException
# --- original classes ---
class BasePage(object):
"""Base class to initialize the base page that will be called from all pages"""
def __init__(self, driver):
self.driver = driver
class BasePageElement(object):
"""Base page class that is initialized on every page object class."""
def __set__(self, obj, value):
"""Sets the text to the value supplied"""
driver = obj.driver
WebDriverWait(driver, 100).until(
lambda driver: driver.find_element_by_name(self.locator))
driver.find_element_by_name(self.locator).clear()
driver.find_element_by_name(self.locator).send_keys(value)
#driver.find_element_by_name(self.locator).send_keys(Keys.Return)
def __get__(self, obj, owner):
"""Gets the text of the specified object"""
driver = obj.driver
WebDriverWait(driver, 100).until(
lambda driver: driver.find_element_by_name(self.locator))
element = driver.find_element_by_name(self.locator)
return element.get_attribute("value")
# --- my classes ---
class SearchTextElement(BasePageElement):
locator = 'q'
class MainPage(BasePage):
# element has to be defined here
# (not as `self.field` because it will not work as expected)
search_text_element = SearchTextElement()
def search(self, query):
self.search_text_element = [query, Keys.RETURN]
# ----
class ResultElement(BasePageElement):
locator = 'q' # there is no other `name` on Stackoveflow
class ResultPage(BasePage):
# element has to be defined here
# (not as `self.field` because it will not work as expected)
result_element = ResultElement()
def get_result(self):
return self.result_element
# --- main ---
#driver = webdriver.Firefox()
driver = webdriver.Chrome()
driver.get('https://stackoverflow.com')
main_page = MainPage(driver)
main_page.search('selenium')
result_page = ResultPage(driver)
result = result_page.get_result()
print('result:', result)
本文向大家介绍什么是PHP文件?如何打开PHP文件?,包括了什么是PHP文件?如何打开PHP文件?的使用技巧和注意事项,需要的朋友参考一下 在平时我们可能会碰到过php文件,可是很多用户不知道php文件是什么文件?也不知道怎么打开php文件?为了满足一些用户的好奇心,小编现在就给大家讲解php文件以及如何打开php文件的方法。 1、PHP文件是什么? PHP(Hypertext Preproc
我试图用Reactjs做一个网站模板。在大屏幕部分,我做订阅表单,在主页部分用户输入表单。但是一个组件的css与另一个组件的css相互作用。我怎么处理?[1]:https://i.stack.imgur.com/Wd4OQ.png 用户EntryJs:- 导入“./User Entry.css” 类窗体扩展组件{initialState={name:,age:,job:}state=this.in
之前各个章节版本库间的交互都是通过git push和/或git pull命令实现的,这是Git最主要的交互模式,但并不是全部。使用补丁文件是另外一种交互方式,适用于参与者众多的大型项目进行分布式开发。例如Git项目本身的代码提交就主要由贡献者通过邮件传递补丁文件实现的。作者在写书过程中发现了Git的两个bug,就是以补丁形式通过邮件贡献给Git项目的,下面两个链接就是相关邮件的存档。 关于Git文
问题内容: 什么是JAXB..episode文件?它是由JAXB生成的,还是为了避免JAXB再生相同类而配置的配置文件? 问题答案: 注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB 2(JSR-222) 专家组的成员。 .episode文件由XJC(XML Schema to Java)编译器生成。它是将架构类型与现有类相关联的架构绑定。当您拥有一个由其他模
在开发软件的过程中,我们需要将编写好的代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做 源文件(Source File)。 我们将在《 编译和链接》一节中讲解编译器的概念。 每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名,例如: C语言源文件的后缀是; C
问题内容: 因此,我在处理大量文件类型方面经验不足,并且我还无法找到有关什么文件的大量信息。这是我想做的事情: 我正在尝试下载以可单独下载的图块形式排列的地图数据集:http://daymet.ornl.gov/gridded 为了立即下载一系列图块,他们说要下载其脚本,该脚本最终导致:https : //github.com/daymet/scripts/blob/master/Bash/day