所以还是需要配合接口测试
确实,最好是控制一张图片。是不是可以判断一下是否是一张图,如果是,则自行判断,如果不是,则发送邮件或者其他的信息,要求手工测试呢
@stevenxu @Ouroboros 请问可以详细讲讲数据回收吗
做抉择,如果之后都运行套件,就直接用套件的相对路径,如果你想要两个都兼顾,那就只能把路径改成绝对路径了。
[markdown](https://testerhome.com/markdown)
好的,谢谢~我试试!
谢谢你的回复,我之前已经增加了option.add_experimental_option("excludeSwitches", ['enable-automation'])
位置如下:
options.add_argument("--headless") # => 为Chrome配置无头模式
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_argument("--window-size=1600,900") # => 设置无头浏览器尺寸为1600.900
但是仍然不在左上方,这很影响截图和部分元素的可见性。
真的是这个原因!
options.add_argument('--start-maximized')
不可行,但是driver.set_window_size(1920, 1080)
可行呢?我的是options.add_argument('--start-maximized')
,应该是一样的效果吧。
会不会是相对路径的问题,suite 运行的位置和用例运行的位置不一样
unittest:setUpClass 必须使用@classmethod 装饰器, 所有 case 运行之前只运行一次
Windows 系统好像不能用 Xvfb
↑
现在的疑惑是如何在无头模式下完成拖拽?
无头模式下好像拖拽不成功,这种情况怎么办?
尝试使用了 pyautogui,在非无头模式下可以实现,一旦切换到无头模式,则无法完成排序操作
没有人遇到过吗
带带我
正如上面讨论的,logger 可能还是要继承一下 Logging,不然行和函数什么的信息会出错。
我尝试过将用例名字放到日志里,我是这样做的,先用类 testCaseInfo 来表示用例的各种信息,如下:
class TestCaseInfo(object):
def __init__(self, test_id="", name="", owner="", result="Failed", start="", end="", error_info=""):
self.id = test_id
self.name = name
self.owner = owner
self.result = result
self.start = start
self.end = end
self.error_info = error_info
因为我跟你不一样,我一个 py 里面很多的用例,所以是用的函数装饰器,放到每一个用例的前后进行一些赋值,比如用例执行前,时间复制到 start
def create_test_info(func):
@wraps(func)
def wrapper(self, *args, **kwargs):
try:
# 这里就可以把用例的名字还有注释放进去啦!
self.testCaseInfo = TestCaseInfo(test_id=func.__name__, name=func.__doc__)
self.testCaseInfo.start = timer.current_time()
func(self, *args, **kwargs)
self.testCaseInfo.result = "Successful"
except Exception as err:
self.testCaseInfo.error_info = str(err)
logger.error(f"测试执行失败!错误信息:{err}")
raise err
finally:
# 这里是logger!
logger.info(f"测试{func.__name__}的详细信息:{result}")
return wrapper
不过还有类装饰器,如果你想直接在 BaseCase 一劳永逸,可以直接试试装在类上面的装饰器?
有一个链接,可以参考一下【类的函数装饰器:装饰器为函数,被装饰对象为类】https://blog.csdn.net/LaoYuanPython/article/details/111303395
经过很多次的尝试,我发现都不行,猜测是否是元素定位除了问题
发现了一个问题,当把第一个元素移动到第四个时,移动的过程中产生了新元素,第一个元素往右移动,第二个元素便占据了第一个元素的位置,这时 ,由于是使用的 find_elements()[0] 的方法定位的第一个元素,所以拖拽不成功。
我考虑到的想法是:
①获取目标元素的坐标
②长按 source 元素【预拖拽元素】
③获取到移动中的 source 元素【class 会发生变化,或者其他属性会发生变化】
④click and hold 移动中的 source 元素, 并移动到目标元素坐标点
。。但是还是不行,请问大家有什么办法吗?
我的尝试 2:
pyautogui.moveTo(source.location['x'] + source.size['width'] / 2, source.location['y'] + source.size['height'] / 2)
# 实现拖拽功能
pyautogui.dragTo(target.location['x'] + source.size['width'] / 2, target.location['y'] + source.size['height'] / 2, duration=1)
但是还是不行。
补充:action_chains.drag_and_drop(drag1, drag2).perform()
拖动无效。
觉得可能是无头模式的原因,参考了博客https://blog.csdn.net/weixin_45477907/article/details/108751664
使用了
ActionChains(self.driver).click_and_hold(source).pause(2).move_to_element(target).release(target).perform()
但是仍然拖动无效。
这是什么原因呢?
这个方法好像不太行,因为这样就把键和值分开了,如果是:
list1 = [{"a": "apple", "b": "banana"}, {"a": "angry", "b": "boring"}]
list2 = [{"a": "boring", "b": "angry"}, {"a": "apple", "b": "banana"}]
他也会以为是一样的吧
其实我不太知道的是如何拖拽,拖拽后的效果不太能预料到