背景
学习使用 XPath 表达式来实现找到目标元素时智能封装等待 执行测试代码启动Chrome浏览器后,地址栏只显示data;
代码如下
import unittest
from selenium import webdriver
from selenium. common. exceptions import NoSuchElementException
from selenium. webdriver. support. wait import WebDriverWait
from HTMLTestRunner_cn import HTMLTestRunner
class MyTest ( unittest. TestCase) :
def setUp ( self) - > None :
chrome_option = webdriver. ChromeOptions( )
chrome_option. add_argument( '--disable-gpu' )
self. driver = webdriver. Chrome( options= chrome_option)
self. imgs = [ ]
self. url = 'http://localhost:8080'
def tearDown ( self) - > None :
try :
self. driver. quit( )
except NoSuchElementException as e:
print ( 'tearDown Error details: {}' . format ( e. args[ 0 ] ) )
def find_element ( self, locator) :
try :
element = WebDriverWait( self. driver, 30 ) . until( lambda x: x. find_element( * locator) )
return element
except NoSuchElementException as e:
print ( 'Error details: {}' . format ( e. args[ 0 ] ) )
raise
def test1 ( self) :
self. find_element( ( 'id' , 'username' ) ) . send_keys( 'admin' )
self. find_element( ( 'id' , 'password' ) ) . send_keys( 'admin' )
self. find_element( ( 'xpath' , '//input[@value="Login"]' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )
self. find_element( ( 'xpath' , '//div[@id="accordion"]//div[contains(@class, "panel-title") and text()="信息查询"]' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )
self. find_element( ( 'partial link text' , '查询顾客信息' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )
if __name__ == '__main__' :
test1 = unittest. defaultTestLoader. loadTestsFromTestCase( MyTest)
suite = unittest. TestSuite( test1)
runner = HTMLTestRunner(
title= '带截图的测试报告' ,
description= 'xxx软件测试报告v0.1' ,
stream= open ( 'reports/sample_test_report.html' , 'wb' ) ,
verbosity= 2
)
runner. run( suite)
解决过程
看了好久找到了替代启动浏览器的方法:换成self.driver.get('http://localhost:8080')
就好了 然后开始琢磨两者的区别:
使用 self.driver.get('http://localhost:8080')
时,driver 是一个 WebDriver 对象,通过调用 get()
方法并传入网址参数来打开浏览器,并加载对应的网页。 而当使用 self.url = 'http://localhost:8080'
时,你只是将网址赋值给了 self.url
这个实例变量,但并没有使用它来打开浏览器。所以在后续的代码中,浏览器仍然会使用默认的网址或者之前通过 driver.get()
方法设置的网址。 如果希望使用 self.url 来打开浏览器,可以在测试方法 test1()
中,通过 self.driver.get(self.url)
来打开指定的网页。
def test1 ( self) :
self. driver. get( self. url)
self. find_element( ( 'id' , 'username' ) ) . send_keys( 'admin' )
self. find_element( ( 'id' , 'password' ) ) . send_keys( 'admin' )
self. find_element( ( 'xpath' , '//input[@value="Login"]' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )
self. find_element( ( 'xpath' , '//div[@id="accordion"]//div[contains(@class, "panel-title") and text()="信息查询"]' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )
self. find_element( ( 'partial link text' , '查询顾客信息' ) ) . click( )
self. imgs. append( self. driver. get_screenshot_as_base64( ) )